2011-01-05 133 views
0

我在尋找showGUI()方法,編譯器說「this」不是靜態變量,不能從靜態上下文中引用,我會用來代替「這個」嗎?我試過test.main(測試是它的包)。我使用靜態方法showGUI()的原因是因爲我需要從另一個靜態方法以及startup()方法調用該方法。以下是我的兩個主要課程。如何在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)); 
} 

甚至更​​好:

public static void createApplicationAndShowGUI() { 
    Main main = getApplication(); 
    main.startup(); 
} 

,甚至更好,不產生任何靜態方法:

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

那麼,在靜態方法中使用this沒有任何意義。 this是指類的特定實例,但static表示這是一種不需要實例的方法,因此不能訪問任何成員變量或方法。

只是要showGUI非靜態。

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

然後我的托盤方法是靜態的不能使用它 – 2011-01-05 23:02:11

+0

showGUI()被startup()調用,它不是靜態的。你沒有展示任何你從靜態上下文中調用它的代碼示例。你需要告訴我們你想要做什麼。正如其他人提到的,你可以使用'new Main()'創建一個新的實例,儘管有一個函數調用'showGUI'實際實例化一個新的Main對象可能會引起誤解。 – EboMike 2011-01-05 23:04:27

0

'this'表示'當前對象'。在靜態方法中沒有當前對象。在您的示例中,請嘗試用new Main()替換this

+0

'showGUI'已被非靜態方法調用。爲什麼要創建一個新實例? – EboMike 2011-01-05 22:52:45

+0

因爲OP說他需要(或者認爲他需要)在靜態上下文中調用showGUI。 – 2011-01-05 22:54:28

+0

我的托盤方法是靜態的,並在用戶單擊打開按鈕時調用方法。 – 2011-01-05 23:03:23

相關問題