2017-02-21 10 views
1

JavaのGUIについて学びたいと思っています。しかし、チュートリアルのWebサイトからTextPadに単純なJFrameコードをコピーしようとすると、コンパイルしようとすると、エラーが発生します:Java GUIメソッドエラー

"C:\ Programming \ Java \ Practice GUI \ GUIPractice.java:7 :エラー:無効なメソッドの宣言、戻り値の型が 公共MyFrameとを必要(){ ^ 1エラー」

私はまた、他のウェブサイトから簡単なGUIコードをコピーするときにも問題があると思わ何、どうなりますか?私は、メソッドがvoidか戻り値型のどちらかでなければならないことを知っていますが、voidの場合や戻り値の型のデータ型を指定しないのはなぜですか?これは他のサイトのGUIコードの構文のようです。ここで

コードです:

// file: EmptyFrame.java 
// Adapted from Core Java, vol.1, by Horstmann & Cornell 

import javax.swing.*; 

class MyFrame extends JFrame { 
    public MyFrame() { 
    setTitle("My Empty Frame"); 
    setSize(300,200); // default size is 0,0 
    setLocation(10,200); // default is 0,0 (top left corner) 
    } 

    public static void main(String[] args) { 
    JFrame f = new MyFrame(); 
    f.show(); 
    } 
} 

私は、NetBeans IDEでこれを試してみましたが、同じエラーが表示されます。 問題があるようですか?

+0

正常に動作するはずです。 –

+0

この "メソッド"は実際にはコンストラクタなので、戻り値の型はありません。しかし、コンストラクタはあなたのクラスと全く同じ名前を付ける必要があります。あなたの命名にはいくつかの混乱があるようです:エラーは "GUIPractice.java"というファイルに報告され、ソースコードは "file:EmptyFrame.java"となり、実際には "MyFrame"と呼ばれます。ファイル名とクラス名? –

+0

混乱して申し訳ありませんが、ウェブサイトから直接コードをコピーしました。実際にTextpadにコンパイルしたときにクラス名が変更されました。 – JPAsensi

答えて

1

あなたのクラスはMyFrameと呼ばれますが、EmptyFrame.javaというファイルにあります。彼らは同じ名前である必要があります。それらは異なるので、MyFrame()がメソッドであると考えます。

+0

クラスがpublic(例のクラスはそうではない)の場合は同じ名前にする必要があります –

+0

しかし、静的メソッド(静的void main())のみを使用することでエラーが発生しますトップレベルのクラスです。 –

+0

もちろん、静的メソッドは最上位クラスでのみ使用できます。しかし、トップレベルのクラスはパブリック、プロテクト、またはパッケージのみを表示することができます。クラスがpublicの場合、クラス名はファイル名と一致する必要があります。 –

0

GUIPractice.javaをMyFrame.javaに変更するか、クラス名とコンストラクタをGUIPracticeに変更します。

+0

混乱して申し訳ありませんが、ウェブサイトからコードを直接コピーしました。実際にTextpadにコンパイルしたときにクラス名が変更されました。 – JPAsensi

0

すべての.javaファイルには、ファイル名と同じ名前のクラスが必要です。そうでない場合は、実行時にClassNotFoundExceptionがスローされます。あなたが見たエラーはかなり奇妙です。なぜコンストラクタの戻り値の型について不平を言うのか分かりません。

ファイルの名前をクラス名と同じ名前、つまりMyFrame.javaに変更してください。クラスをpublicにすることもできます。

+0

この要件が明記されているリンクを提供できますか?私が知る限り、パブリッククラスのみが同じ名前のファイルに存在する必要があります。 (同様の名前のファイルにクラスを配置するのがベストプラクティスですが、パブリッククラスにのみ必要です) –

+0

私はそれをテストして、ClassNotFoundExceptionがスローされました。 @ThomasKläger – Sweeper

+0

混乱して申し訳ありませんが、ウェブサイトから直接コードをコピーしました。私はTextpadにコンパイルしたときに実際にクラス名を変更しました。 – JPAsensi

0

問題は、コードをTextpadにコピーした後、ファイル名と一致するようにクラス名をGUIPracticeに変更してから実際に問題が発生しました。しかし、GUIコードを含むメソッドが実際にはメソッドではなく、コンストラクタであることはわかりませんでした。 しかし、なぜ私にバッフルは、コンストラクタがクラス名と同じ名前を持つべきかということです。

+0

これはコンストラクタの名前です。 [Java Language Specifiction](http://docs.oracle.com/javase/specs/jls/se8/html/jls-8.html#jls-8.8)には次のように記載されています。** ConstructorDeclaratorのSimpleTypeNameは、シンプルでなければなりませんコンストラクタ宣言を含むクラスの名前、またはコンパイル時エラーが発生します** ** –

+0

ありがとう、私たちはまだクラスのメソッドのトピックにあるので、実際にはわかりませんでした。ありがとう – JPAsensi