2012-06-03 82 views
0

我需要引用客戶端,因爲我需要調用setWinTitle來更改當前窗口的標題。如何解決它?將靜態類引用傳遞給非靜態類的構造函數

public class Client { 
     public static void main(String[] args){ 
      JPanel gui= startGUI(); 
      ... 
     } 

     private static JPanel startGUI(){ 
      f = new JFrame(); 
      JPanel gui = new JPanel(this); // error 
     } 

     public void setWinTitle(String tite){ 
      f.setTitle(tite); 
     } 
    } 

public class JPanel extends javax.swing.JPanel { 
    Client client; 

    public JPanel(Client cl) { 
     client= cl; 
     initComponents(); 
    } 
... 
} 
+3

我認爲這是混淆命名類JPanel的一個;我會將其改爲更具體的問題。 – duffymo

回答

3

您需要創建的Client一個實例:

JPanel gui = new JPanel(new Client()); 
+0

當創建新的* Client *時,是不是會構造它,然後輸入它的* main *? –

+0

@RCola - no:儘管它具有*一個*「靜態main()」方法,您可以根據需要調用盡可能多的類實例(例如「客戶端」)。另外:另一種解決方案可能是'JPanel gui = new JPanel()' – paulsm4

+0

@RCola:創建對象時不會調用'main()'。相反,當啓動你的應用程序時,'main()'被Java虛擬機調用一次(並且只能調用一次)。 JVM沒有實例化包含'main()'方法的對象 - 它不需要,因爲'main()'方法是靜態的。 –