-1

メソッドからではなくクラスから自分の仕事を成し遂げようと思ったとき、私はちょうどJavaをいじくり回していました。私がしたことをチェックしてください。

import javax.swing.*;

class foolingAround{
    public static void main(String ARG[]) {
        createMyInterface();
    }

    private static void createMyInterface(){
        JFrame f = new JFrame("Frame from Swing but not from other class");
        f.setSize(100,100);
        f.setVisible(true);
        new createAnotherInterface();
    }

}

class createAnotherInterface{
    public static void main(String arg[]){
        giveMe();
    }

    static JFrame giveMe(){
        JFrame p = new JFrame("Frame from Swing and from another class");
        p.setSize(100,100);
        p.setVisible(true);
        return p;
    }
}

エラーなしでコンパイルされましたが、からのフレームclass createAnotherInterfaceは表示されませんでした。なんで?メソッドではなく、異なるクラスを作成するのはいつですか?

4

7 に答える 7

1

2番目のクラスをインスタンス化しても、その「メイン」メソッドは呼び出されませんgiveMe()。最初のクラスからメソッドを明示的に呼び出す必要があります。

private static void createMyInterface(){
        JFrame f = new JFrame("Frame from Swing but not from other class");
        f.setSize(100,100);
        f.setVisible(true);
        new createAnotherInterface().giveMe();
    }

「メイン」関数は「エントリポイント」と呼ばれ、Javaアプリケーションを「起動」するときにJVMがジャンプする関数です。異なるクラスには複数のメインが存在する可能性があるため、コマンドラインから起動するときに「どのクラス」を指定する必要があります。

于 2012-11-12T21:32:54.363 に答える
1

またはnew createAnotherInterface();を起動するのではなく、新しいオブジェクトのみを作成します。giveMe()main

問題を解決するために「foolAround」できる方法は複数ありますが、おそらく最も簡単な方法は変更することです。

new createAnotherInterface();

の中へ

createAnotherInterface.giveMe();

また、createAnotherInterfaceこれはインターフェースではないことに注意してください。「foolingAround」フェーズが完了したら、Javaプログラミング言語のコード規則に従う必要があります。

于 2012-11-12T21:33:33.303 に答える
1

createAnotherInterfaceクラスにはmainメソッドを含めるべきではなく、持っている場合は呼び出されません。コンストラクターが必要です。または、そのクラスのインスタンスへの参照を使用して、giveMe()メソッドを呼び出す必要があります。

于 2012-11-12T21:34:21.380 に答える
1
 new createAnotherInterface();

createAnotherInterfaceのデフォルトコンストラクタのみを呼び出します。

giveMe()クラスから明示的に呼び出す必要がありますfoolingAround

private static void createMyInterface(){
    JFrame f = new JFrame("Frame from Swing but not from other class");
    f.setSize(100,100);
    f.setVisible(true);
    createAnotherInterface.giveMe();
}

または、CreateAnotherInterfaceのコンストラクターを記述します。

    class createAnotherInterface{
    public createAnotherInterface(){
    giveMe();
    }
    public class FoolingAround {
    private static void createMyInterface(){
        JFrame f = new JFrame("Frame from Swing but not from other class");
        f.setSize(100,100);
        f.setVisible(true);
        new createAnotherInterface();
    }
}
于 2012-11-12T21:34:27.863 に答える
0

実際、私はあなたのコードをコピーしてテストしました。ファイル名はcreateAnotherInterface.javaです。

動作してJFrame出てきます。

于 2012-11-12T21:41:02.640 に答える
0

メソッドに名前を付けました。giveMeコンストラクターにリファクタリングするcreateAnotherInterfaceか、そのメソッドを開始するコンストラクターを作成することを検討してください。

于 2012-11-12T21:42:26.660 に答える
0

createAnotherInterfaceクラスの新しいオブジェクトを作成しているだけで、デフォルトではデフォルトのコンストラクターが呼び出され、そのデフォルトのコンストラクターではgiveMe()メソッドは呼び出されません。

私が正しいか間違っているかはわかりませんが、「createAnotherInterface」クラスでコンストラクターを作成し、コンストラクターで「giveMe()」メソッドを呼び出すようにお願いします。それがあなたの問題を解決することを願っています。

または少なくとも電話

new createAnotherInterface().giveMe();

createMyInterface()クラスで

于 2012-11-12T21:54:35.107 に答える