ネットワークゲームクライアントを作成していますが、ボタンがクリックされたときにフレームを切り替えるときに問題が発生します。
クライアントの各ページを異なるフレームで記述しましたが、クライアントのホームページからメニューボタンをクリックするとそれらのフレームが表示されます。
以下は私が行ったコードです。
public class homePage extends JFrame{
public homePage () {
initComponents();
}
private void initComponents(){
// the frame and butttons are here....
GameListBtn.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
this.setVisible(false); // to hide the current home page
new GameList().start(); // to start new frame called GameList
// basically the same thing as following code
// GameList gl = new GameList();
// gl.setVisible (true);
// gl.run();
}
}
}
public class GameList extends JFrame{
public GameList(){
//Everything about the frame is here
}
// this method is for connection
public void run(){
try{
// open socket and initialize input streams, output streams here
while (true){
//process data to and from server
}
}// end of try
} // end of run
// this method is to display GameList frame and it's connection
public static void start(){
GameList frame = new GameList();
frame.setVisible(true);
frame.run();
}
}
この次のクラスはGameListフレームを実行するだけで、メインメソッドからの接続です
public static void main(String[] args) {
new GameList().start();
// basically the same thing as following code
// GameList gl = new GameList();
// gl.setVisible (true);
// gl.run();
}
私のGameListフレームは、mainメソッドから実行しただけで正しく機能します。GUIが表示され、接続が確立され、データ送信が成功します。基本的にやりたいのは、ホームページのActionListenerから新しいGameList()。start()メソッドを呼び出すことです。これは、mainメソッドから呼び出し、GameListを表示し、ホームページを非表示にすることができるためです。
最初のコードで示したようにこれを行うと、GameListのGUIはロードされません(黒くなっただけです)が、接続は確立され、データ送信は成功します。GUIは、接続が終了した場合にのみ表示されます。その理由は、GameListのrun()メソッド内のwhileループにあると思われますか?
しかし、繰り返しになりますが、GameListクラスのメインから実行すると、まったく同じことが魅力のように機能します。私がしていることはすべてまったく同じですが、ホームページから呼び出したときにGUIがロードされない理由を誰かに教えてもらえますか?
私の質問がばかげているように聞こえたら申し訳ありませんが、どんな助けでも大歓迎です。