javaを勉強しようと思い、参考書付属CDROMからjdk1.3.1_01をインストールした
のですが、コマンドラインでのコンパイル、classファイルの実行は出来るのです
けどGUI(Frame)を作成する時にコンパイルが出来ません。
「setSizeメソッドがありません」というようなエラーが出ます。
ライブラリが無い、もしくはディレクトリ構成が違うのかと思い、sunのHPからいろいろ
調べたのですがファイル構成がとくに間違っている様子でもなさそうです。
使用しているユーザー環境のシェルプロファイルには以下の記述でパスを通しています。

export JAVA_HOME=/usr/java/jdk1.3.1_01
PATH=$PATH:$JAVA_HOME/bin

(redhat7.1にrpmからインストールしました。ディレクトリは/usr/java/jdk1.3.1_01/
です。インストール方法とパスの記述は参考書にあったものと同様にしました。)

GUIの作成に何か他に必要なものがあるのでしょうか。または各種設定等に問題が
あるのでしょうか。どなたか助言、御指摘いただければ、と思います。

ちなみにファイル構成の確認は下記のページを参照しました。
http://java.sun.com/j2se/1.3/ja/docs/ja/tooldocs …

このQ&Aに関連する最新のQ&A

A 回答 (3件)

#2を書いたatonです。


見落としが一つありました。
同一ファイル内でAppFrameとFrameの2つのクラスを宣言してるんですね。
Javaでは原則一ファイル一クラスなので,これはペケです。
そもそもFrameクラスを作る意味がないので,ソースは以下のようであるべきだと思います。

<ソース ファイル名AppFrame.java>
//
// AppFrame.java -- フレームを作る
//
import javax.swing.*;

public class AppFrame extends JFrame {
public AppFrame() {
setSize(400, 300);
}
public static void main(String[] args) {
AppFrame frame = new AppFrame();
frame.show();
}
}
<ソース終り>

しかしもしpalopaloさんが#1に書かれたようなソースが参考書に載っていたのだとしたら,その参考書は捨てたほうがいいと思いますが…。
    • good
    • 0
この回答へのお礼

atonさん、ありがとうございます。このソースで早速試してみます。
また、urlを参考にさせていただきます。
moyuruさん、atonさん、ご回答いただき本当にありがとうございました。

お礼日時:2002/01/08 19:30

Javaではpublicなclassの場合,ファイル名とクラス名が一致していなければまずいはず(参考URL)。

この場合ファイル名は AppFrame.java でないとコンパイルエラーが出ます。

ちなみに,参考URLのおおもとのページ

http://www.gimlay.org/~javafaq/javafaq.html

はJavaの勉強を始める人に役立つ情報がたくさんあるので,下手な参考書より役に立つと思います。

参考URL:http://www.gimlay.org/~javafaq/S002.html#S002-04
    • good
    • 0

>コマンドラインでのコンパイル、classファイルの実行はできるのですが


それでメソッドのエラーがでるのなら単純なコードのミスだと思います。せめてソースとエラーの内容くらい載せて下さい。

この回答への補足

ご回答ありがとうございます。
問題のソースとエラー内容を書きます。

<ソース ファイル名Frame.java>
//
// Frame.java -- フレームを作る
//
import javax.swing.*;

class AppFrame extends JFrame {
public AppFrame() {
setSize(400, 300);
}
}
public class Frame
{
public static void main(String[] args)
{
AppFrame frame = new AppFrame();
frame.show();
}
}
<ソース終り>

<エラー表示 "javac Frame.java"実行時>
Frame.java:8:error:Cannot find method "setSize(int, int)"
<エラー表示終り>

Frame.javaは、始め参考書を見ながら自分で書いてみたのですが、エラーになったため
参考書付属のCDROMにあるソースをjavacしてみたけど結果は同じでした。上記ソースが
参考書付属のものです。
自分なりに、
「エラーにsetSize(int, int)のmethodが見付からない。
javax.swing.*をimportとあるので恐らくこれがsetSizeを含むライブラリ?
setSizeが無いということは、javax.swingが無い、または正しい場所に無くて読めない。」
などと考え(java関連の書物等にswingを使ってGUIを作成する。云々。とあるのでこのように
考えました。)swingがどこにあるのか?などいくつか調べましたが、今一つ理解出来ない時に
質問のなかで書いたsunのurlにたどりつき、jdkのファイル構成は間違っていないことを知り、
それでは一体何?と訳がわからなくなったのではずかしながら熟練者の知恵をお借りしようと
思った次第です。
上記の私の考えかたを含め、どんなご意見でも結構です。ご指摘くださればと思います。

補足日時:2002/01/07 19:45
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aと関連する良く見られている質問

QJDK1.1.7 と JDK1.3.1 の違い。。。

はじめて質問いたします。
現在、JDK1.1.7 で開発したアプレットがあるのですが、
この中で、java.awt.Choice を未選択状態にする為に select(-1); 
としている個所があります。
このアプレットをJavaPlug-in1.3.1 を使用して実行すると、IllegalArgumentException
が発生してしまいます。

そこで、1.1.7 と 1.3.1 のソースコードを比べてみると、確かに、1.3.1 では、
select(-1) は認めていないようです。

--- JDK1.1.7 の java.awt.Choice の実装 --->

public void select(int pos) {
  if (pos >= pItems.size()) {
    throw new IllegalArgumentException("illegal Choice item position: " + pos);
  }
    :
    :
}
<--- JDK1.1.7 ---

--- JDK1.3.1 の java.awt.Choice の実装 --->

public synchronized void select(int pos) {
  if ((pos >= pItems.size()) || (pos < 0)) {     <--- 違いはここだけ。。。
    throw new IllegalArgumentException("illegal Choice item position: " + pos);
  }
    :
    :
}
<--- JDK1.3.1 ---

う~ん、まさしく、-1 を拒否していますね。

何故、このような実装の違いが出ているのでしょうか?
(私的には、Java2開発者の気まぐれなのではと考えてしまいます。。)

また、このアプレットを最小限の修正で1.3.1 でも正常に動作するようにしたいの
ですが、1.3.1 の java.awt.Choice では未選択状態にする事は不可能なのでしょうか?

ご存知の方がおられましたら、是非、お教え頂きたいと思います。
よろしくお願い致します。

はじめて質問いたします。
現在、JDK1.1.7 で開発したアプレットがあるのですが、
この中で、java.awt.Choice を未選択状態にする為に select(-1); 
としている個所があります。
このアプレットをJavaPlug-in1.3.1 を使用して実行すると、IllegalArgumentException
が発生してしまいます。

そこで、1.1.7 と 1.3.1 のソースコードを比べてみると、確かに、1.3.1 では、
select(-1) は認めていないようです。

--- JDK1.1.7 の java.awt.Choice の実装 --->

public void select(int pos) {
  if...続きを読む

Aベストアンサー

バージョン1.1.xのAPI仕様を見ても、select(-1)で未選択状態に出来るとは書いてないんですよね…… だから1.1.7のselect(-1)で未選択状態に出来たのは、たまたまそうなっていたからとしか言いようがありませんね。

API仕様では、バージョン1.1でも1.3でも例外キャストの条件が「指定された位置が無効な場合」となっていて、具体的な数字が出てこないのでかなりあいまいな表現ですが、それでも引数に-1を渡したら普通は例外になると考えるのが自然です。

いずれにせよ、バージョン1.3のAPI仕様を見る限り、未選択状態に関することは載っていないので、あとから未選択状態になるように仕向けるのはあきらめたほうが良いと思われます。ほかに上のような裏技があったとしても、将来の実装が変更されないとは言い切れません。

提案: 未選択状態にする代わりに、空白の選択項目、あるいはウェブページに良くある「選択してください!」といったような“無効な項目”を作ってはどうでしょう。未選択状態にする目的がかかれてないので、なんともいえませんが。

QJRE1.3.1_06とJRE1.3.1_07のPC内 共存方法

知人の相談なのですが
自治体の電子入札システムで
川崎市の入札画面に入るにはJRE1.3.1_06必須(以下06)
神奈川県入札画面に入るにはJRE1.3.1_07必須(以下07)

入札担当者に聞いたところPC内共存は できないので
神奈川入札時は06削除で07インストール
川崎入札時は07削除で06インストール。という回答。

削除はコントロールパネルからです
削除&インストール&設定は1分もあればOKなのですが

「こんな面倒くさいこと、いちいち やってられない
削除&インストールしなくて すむ方法ないものか?」と
相談持ちかけられました。

はたして PC内でバージョン違いのJava共存はできるのでしょうか?
06 07削除インストールしなくても、各自治体入札画面に
入っていけるように したいのです。

お願いいたします。

Aベストアンサー

件の入札システムを使用したことがないので確実なことはいえませんが…

まずインストール場所は個別に指定できるので両バージョンとも共存できます。
両バージョンの使い分けは環境変数PATHの設定のみです。環境変数はユーザごとにカスタマイズできるので、
川崎市のシステムを使うアカウントと神奈川県のシステムをつかうアカウントを別々に作成しておく、
環境変数を書き換えるバッチを作るなど、手段はいろいろあると思います。

Q環境変数JAVA_HOMEとPATHの違い

JAVAをはじめて間もない初心者です。
ふと疑問に思ったことがあるので、質問させていただきます。

先日、自宅サーバ(CentOS4.6)にjava(j2sdk1.4.2_16)をインストールしたのですが、OSに元々javaがインストールされていました。

SHELL># whereis java
と打つと[java: /usr/bin/java]と出てきて、実際/usr/bin以下にjavaの実行ファイルがあります。

自分でインストールしたjavaは
/usr/loacl/j2sdk1.4.2_16というディレクトリを作成してその下に展開しています。

システムの環境変数に自分でインストールしたjavaを指定しようと
SHELL># export JAVA_HOME=/usr/local/j2sdk1.4.2_16
SHELL># export PATH=${JAVA_HOME}/bin:${PATH}
と設定したのですが、
$PATHには/usr/binも設定されています。

javaを実行した場合は、どちらのjava実行ファイルが参照されるのでしょうか?
(OSに元からインストールされているjava[/usr/bin/java]なのか、自分でインストールしたjava[/usr/local/j2sdk1.4.2_16/bin/java]なのか)


そもそも、JAVA_HOMEは何のために設定するのでしょう?googleなどで「JAVA_HOMEとは」などと調べたのですが、イマイチ僕の欲しい答えが出てきません。
javaへのPATHさえ設定していれば、問題ないような気がするのですが、、。


とても稚拙な質問だと思いますが、良ければアドバイスよろしくお願いします。

JAVAをはじめて間もない初心者です。
ふと疑問に思ったことがあるので、質問させていただきます。

先日、自宅サーバ(CentOS4.6)にjava(j2sdk1.4.2_16)をインストールしたのですが、OSに元々javaがインストールされていました。

SHELL># whereis java
と打つと[java: /usr/bin/java]と出てきて、実際/usr/bin以下にjavaの実行ファイルがあります。

自分でインストールしたjavaは
/usr/loacl/j2sdk1.4.2_16というディレクトリを作成してその下に展開しています。

システムの環境変数に自分でインスト...続きを読む

Aベストアンサー

>javaへのPATHさえ設定していれば、問題ないような気がするのですが

Javaを使うだけなら、問題ないですよ。
JAVA_HOMEを設定するようになったのは、サーバサイドJavaが広まるのにあわせて、かな。サーバサイドJavaの学習では、必ずといっていいほど、Tomcatサーバが使われる。で、このTomcatが、JDKのホームディレクトリとしてJAVA_HOMEを参照するように作られている、というわけ。

で、最初はPATHに直接JDKのディレクトリを入れていて、Tomcatを使うようになってからJAVA_HOMEを設定したりしてたんだけど、「それなら、JDKのホームはJAVA_HOMEにして、PATHなんかは全部JAVA_HOMEを使って指定するようにしたほうが面倒がないや」ってことで、多くの入門などで、最初からJAVA_HOMEにJDKのホームディレクトリを指定するように説明するようになった、というわけ。(今は、Tomcat以外にもJAVA_HOMEを見るものはあるかも)

だから、「Javaを利用する上で重要なプログラムがJAVA_HOMEを参照することがあるので、最初からそう設定したほうがいい」と考えるのがよいかと。

>javaへのPATHさえ設定していれば、問題ないような気がするのですが

Javaを使うだけなら、問題ないですよ。
JAVA_HOMEを設定するようになったのは、サーバサイドJavaが広まるのにあわせて、かな。サーバサイドJavaの学習では、必ずといっていいほど、Tomcatサーバが使われる。で、このTomcatが、JDKのホームディレクトリとしてJAVA_HOMEを参照するように作られている、というわけ。

で、最初はPATHに直接JDKのディレクトリを入れていて、Tomcatを使うようになってからJAVA_HOMEを設定したりしてたんだけど...続きを読む

QJAVAのJDK6/7の切り替え

64ビットのWindows8のマシンにjdk-6u21-windows-x64.exeとjdk-7u45-windows-x64.exeの2つ
をインストールした状態で、環境変数で、
JAVA_HOME6 : C:\Program Files\Java\jdk1.6.0_21
JAVA_HOME7 : C:\Program Files\Java\jdk1.7.0_45
JAVA_HOME : %JAVA_HOME6%
PATH : %JAVA_HOME%\bin;

のようにして6と7を切り替えられるようにして使いたいのですが、現在上記の設定で、
>path を実行すると6のパスを指しているのですが、
>java -version を実行すると常に7を表示します。

この状態で、コマンドプロンプトからコマンドを実行したり、Eclipseを立ち上げた場合、実際
どちらのものが使われることになるのでしょうか?
また、ひとつのマシンで上記のようにJavaを切り替えて使うことは可能なのでしょうか?

Aベストアンサー

実際に切り換えて使った事はないのではっきりした事は言えませんが、JAVA_HOMEやPATHに直接パスの値を設定されたら直るのではと思われますので試してみて下さい。

www.javadrive.jp/install/jdk/index4.html
PATHの設定及び環境変数JAVA_HOMEの設定

QJDKのPATHの設定は何故?

 java初心者です、宜しくお願いします。
 Eclipseをpcに積もうとするとき、必ず先にJDkを積んでくださいとPCから要求されます。
 JDkを積んだ場合、必ずPATHの設定を要求されますが、これが理解出来ません。
 これはFileへアクセスするためのルートを指定するものだろうと思っていますが、普通のアプリケーションをDLした場合にはこのような作業は行いませんが、なぜJDkの場合にはこのような作業が必要になるのでしょうか。

 またどのようなアプリケーションの場合にはこれが必要になるのでしょうか。
 PATH設定の画面を見ると他にもPATHが自動的に?設定されているようでした。

 また、Eclipse単独(JDkを含んでいる?)ですべてインストールできるパックのようなものを以前DLしたことがあるのですが、何処かからDL出来るのでしょうか。
 この場合はなぜPATHを設定してやらなくても良いのでしょうか。

 以上、宜しくお願いします。

Aベストアンサー

自分はSunの人間ではないので、真意は不明ですが、
基本的にはKyon2_PaPaさんの言っていることに同意です。
PATHの自動設定なんて不要、セキュリティ的にいらない、
元からあった設定が変えられる、という意見があるからでしょう。

>ワードとかはインストール時には少なくともユーザーはPATHの設定を求められませんが。
>JDKはPATHの設定(環境変数の設定のことです)を求められます、その単純な違いと疑問
>の答えが知りたいだけなのですが。

JDKとワードを一緒に並べると余計混乱するでしょう。利用対象のユーザが違います。
ワードはPCのことをほとんど知らないユーザでも使用するソフトであり、
JDKはPG開発を行う開発者が使うものですから。

そもそも、インストールすれば自動でPATHが通ってる、という考え方もWindows独自のものです。
これはシングルユーザで、初心者でも使いやすいように、極力難しい部分は除く、
という思想によるものです。
他のOSでは、カレントディレクトリにPATHを通すこと自体控えているのに、
一般アプリ(JDK)が勝手にPATHをいじる、というのも考え物です。
JavaはWindowsだけのものではなく、いろんなOSで使われるのが最大のメリットですから。

最終的にこれは考え方の問題でもあるとは思います。
「インストーラが自動でPATHを設定してくれる」と考えるのと、
「インストーラが勝手にレジストリをいじった」と考えるのと。
個人的には、JDKは最小構成の開発環境ですから、これで十分だと思ってます。
いろいろ必要ならAll-in-Oneを使えばいい、とも思います。
極論ですが、自分にとってはインストーラすら不要です。
できるなら、圧縮ファイルだけ用意してもらって、
自分で解凍、PATH設定をしたいくらいです。
なんたってインストールすればレジストリが汚されますから。

自分はSunの人間ではないので、真意は不明ですが、
基本的にはKyon2_PaPaさんの言っていることに同意です。
PATHの自動設定なんて不要、セキュリティ的にいらない、
元からあった設定が変えられる、という意見があるからでしょう。

>ワードとかはインストール時には少なくともユーザーはPATHの設定を求められませんが。
>JDKはPATHの設定(環境変数の設定のことです)を求められます、その単純な違いと疑問
>の答えが知りたいだけなのですが。

JDKとワードを一緒に並べると余計混乱するでしょう。利用...続きを読む


人気Q&Aランキング

おすすめ情報