- ベストアンサー
GUI(Frame)作成について
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/linux/jdkfiles.html
- みんなの回答 (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に書かれたようなソースが参考書に載っていたのだとしたら,その参考書は捨てたほうがいいと思いますが…。
その他の回答 (2)
- aton
- ベストアンサー率47% (160/334)
Javaではpublicなclassの場合,ファイル名とクラス名が一致していなければまずいはず(参考URL)。この場合ファイル名は AppFrame.java でないとコンパイルエラーが出ます。 ちなみに,参考URLのおおもとのページ http://www.gimlay.org/~javafaq/javafaq.html はJavaの勉強を始める人に役立つ情報がたくさんあるので,下手な参考書より役に立つと思います。
>コマンドラインでのコンパイル、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のファイル構成は間違っていないことを知り、 それでは一体何?と訳がわからなくなったのではずかしながら熟練者の知恵をお借りしようと 思った次第です。 上記の私の考えかたを含め、どんなご意見でも結構です。ご指摘くださればと思います。
お礼
atonさん、ありがとうございます。このソースで早速試してみます。 また、urlを参考にさせていただきます。 moyuruさん、atonさん、ご回答いただき本当にありがとうございました。