2011-01-05 11 views
0

showGUI()メソッドの動作を見ていますが、コンパイラには "this"は静的変数ではなく、静的コンテキストからは参照できません私は "これ"を置き換えるために使用するでしょうか?私はtest.mainを試してみました(テストはそのパッケージです)。私が静的メソッドshowGUI()を使用しているのは、別の静的メソッドとstartup()メソッドから呼び出されるメソッドが必要なためです。以下は私の2つの主要なクラスです。Javaで "this"を何かに置き換えるにはどうすればいいですか?

public class Main extends SingleFrameApplication { 

    @Override protected void startup() { 
     showGUI(); 
    } 

    @Override protected void configureWindow(java.awt.Window root) { 
    } 

    public static Main getApplication() { 
     return Application.getInstance(Main.class); 
    } 

    public static void main(String[] args) { 
     launch(Main.class, args); 

    } 

    public static void showGUI() { 
     show(new GUI(this)); 
    } 
} 

public class GUI extends FrameView { 

    public GUI(SingleFrameApplication app) { 
     super(app); 
     initComponents(); 
    } 
    private void initComponents() { 
     //all the GUI stuff is somehow defined here 
    } 
} 

答えて

1

thisを別の機能に渡す必要がある場合は、 GUIのコンストラクタは、オブジェクトを必要とし、showGUIは最高の非静的メソッドとして残っている:あなたは本当に静的メソッドが必要な場合は

@Override protected void startup() { 
    showGUI(); 
} 

public void showGUI() { 
    show(new GUI(this)); 
} 

は、あなたが上で動作するオブジェクトが必要です:

public static void createApplicationAndShowGUI() { 
    Main main = getApplication(); 
    show(new GUI(main)); 
} 

またはより良い:

// in your context outside of the Main object 
Main main = Main.getApplication(); 
main.showGUI(); 

さらに良い
public static void createApplicationAndShowGUI() { 
    Main main = getApplication(); 
    main.startup(); 
} 

かは、任意の静的メソッドを作成しないでください

5

まあ、静的な方法でthisを使用することは意味がありません。 thisはクラスの特定のインスタンスを指しますが、staticは、インスタンスを必要とせず、メンバー変数やメソッドへのアクセス権を持たないメソッドであることを意味します。

showGUIを非静的にするだけです。

public void showGUI() { 
    show(new GUI(this)); 
} 
+0

静的な私のトレイメソッドは使用できません –

+0

showGUI()は、スタティックではないstartup()によって呼び出されます。静的コンテキストから呼び出す場合のコード例は表示していません。あなたは何をしようとしているか教えてください。他にも言及しているように、 'new Main()'を使って新しいインスタンスを作成することができますが、 'showGUI'という関数呼び出しで実際に新しいMainオブジェクトをインスタンス化するのは誤解を招きます。 – EboMike

0

「this」は「現在のオブジェクト」を意味します。静的メソッドでは、現在のオブジェクトはありません。あなたの例では、thisnew Main()に置き換えてみてください。

+0

'showGUI'は既に非静的メソッドによって呼び出されています。なぜ新しいインスタンスを作成するのですか? – EboMike

+0

OPは彼が静的なコンテキストでshowGUIを呼び出す必要がある(または彼が必要と考える)と述べたので。 –

+0

私のトレイメソッドは静的で、ユーザーが開いているボタンをクリックするとメソッドを呼び出します。 –

関連する問題