2012-06-03 2 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

Когда создается новый * Клиент *, не будет ли он создан, а затем введите его * main *? –

+0

@RCola - no: вы можете вызывать столько экземпляров класса (например, «Клиент»), сколько хотите, хотя он имеет точно * один * «статический main()» метод. ТАКЖЕ: альтернативным решением может быть «JPanel gui = new JPanel()' – paulsm4

+0

@RCola: 'main()' не вызывается при создании объекта. Скорее, 'main()' вызывается один раз (и только один раз) виртуальной машиной Java при запуске приложения. JVM не создает экземпляр объекта, содержащего метод 'main()', поэтому он не нужен, потому что метод 'main()' является статическим. –

Смежные вопросы