2012-06-03 79 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()'方法是静态的。 –