2012-01-17 9 views
2

私は、複数のスイングGUIを備えたアプリケーションを開発しています。メインGUIには、一旦押されると、他のGUIを呼び出すボタンがあります。問題は、ボタンを押して新しいGUIが現れたら、両方のウィンドウがハングすることです。スイング - 複数のGUI

私はSwingUtilities.invokeLaterを探していましたが、最初のGUIを作成するために使用することはできません。オブジェクトへの参照を渡しているため、コンパイラが要求するとおりに「最終的」にしたくありません。 。二つ目がで作成され

MainUI gui = new MainUI(player); 
gui.setVisible(true); 

最初のGUIを使用して作成され

private void challengeBtnActionPerformed(java.awt.event.ActionEvent evt) { 
    if (board.isVisible()) { 
     board.dispose(); 
     resetComponents(); 
    } else { 
     MainUI gui = new MainUI(player); 
     gui.setVisible(true); 
    } 
} 

あなたは、私を助けてくださいことはできますか?

+2

1)すぐに役立つように、[SSCCE](http://sscce.org/)を投稿してください。 2) '複数のGUI'によって複数のJFrameを意味する場合、あなたは既に間違っています。最初に修正してください。どのように私に尋ねて! –

+0

@AndrewThompsonはい、複数のGUIで複数のJFramesを意味します。私が「すでに間違っている」ってどういう意味ですか? – DaveQuinn

+0

'player'パラメータを' final'にしたいのはなぜですか? – MockerTim

答えて

6

もう一度:EDT以外のスレッドからSwingコンポーネントを操作しないでください。

次の方法であなたのMainUIを呼び出す必要があります。

public class MainUI extends javax.swing.JFrame { 
    public static void main(String[] args) { 
     SwingUtilities.invokeLater(new Runnable() { 
      public void run() { 
       new MainUI().setVisible(true); 
      } 
     }); 
    } 
} 

あなたは、このような方法であなたのMainUIを起動することを可能にするためにアプリケーションを再設計することができます。

UPDATE:

次のコードは動作するはずです。

public class MainUI extends javax.swing.JFrame { 
    public static void main(String[] args) { 
     final Player player = new Player(); 
     SwingUtilities.invokeLater(new Runnable() { 
      public void run() { 
       new MainUI(player).setVisible(true); 
      } 
     }); 
     player.changeState(); // You can do this 
     // player = new Player(); // You can't do that 
    } 
} 
関連する問題