2017-05-09 23 views
-2

最初のウィンドウで1つのボタンを押すと、自分のJavaプログラムが新しいウィンドウを開きます。それから私は最初のウィンドウを閉じる必要があります。 System.exit(0);で最初のウィンドウを閉じると、2番目のウィンドウが閉じます。私はsetVisible(false);を試して、最初のウィンドウが閉じない。助けてください!JAVA - 2つのウィンドウがあり、1つのウィンドウを閉じる必要があります

全体コード:

public class NameChooser extends JFrame implements ActionListener { 

public NameChooser() { 
    RunNC(); 
} 

public final void RunNC() { 
    JPanel panel = new JPanel(); 

    JLabel label = new JLabel("Enter your name that will be shown in game!"); 
    label.setBounds(20, 10, 500, 25); 
    panel.add(label); 

    JLabel error = new JLabel(""); 
    error.setForeground(Color.red); 
    panel.add(error); 

    JTextField name = new JTextField(30); 
    name.setBounds(50, 40, 180, 25); 
    panel.add(name); 

    JButton playButton = new JButton(new AbstractAction("Play") { 
     @Override 

     public void actionPerformed(ActionEvent e) { 
      String enteredname = name.getText(); 

      if("".equals(enteredname)) { 
       error.setVisible(true); 
       error.setText("Invalid name!"); 
       error.setBounds(105, 95, 100, 25); 
       System.out.println("Invalid name!"); 
      } 

      else if(enteredname.length() > 10) { 
       error.setVisible(true); 
       error.setText("Name cant have more than 10 characters!"); 
       error.setBounds(25, 95, 600, 25); 
       System.out.println("Name cant have more than 10 characters!"); 
      } 

      error.setVisible(false); 

      GameWindow game = new GameWindow(); 
      game.StartGame(); 

      // I need to close window on this line! 
     } 
    }); 

    playButton.setBounds(110, 70, 60, 25); 
    panel.add(playButton); 
} 

任意のヘルプ?

+2

あなたのコードはどこですか?何か試しましたか? – Edwin

答えて

0

問題は、System.exit()がJava VMを完全に終了させ、両方のウィンドウが同じVMインスタンス上で実行されているために発生します。

Jframeを使用します。 dispose()の代わりに閉じたいものに置き換えてください。

+0

'非staticメソッドdispose()を型Windowから静的に参照することはできません.'エラー – Neonry

+0

@Neonry申し訳ありません - サンプルコードを提供していないので、完全な文を印刷できませんでした。 JFrameの*インスタンス*で呼び出す必要があります。したがって、JFrameフレーム=新しいJFrame(); ** frame **。dispose()を呼び出してそれを取り除く必要があります。この問題を解決した場合は、この回答を正しくマークすることを忘れないでください:) –

-1
System.exit(0); 

"ウィンドウを閉じる"では、アプリケーション全体が実行されているJVMを終了するため、アプリケーション全体が終了します。

JFramesについて話している場合は、dispose()メソッドを使用して、別々の画面を閉じてみてください。

setVisible(false)にコメントする場合は、間違った変数で呼び出している可能性があります。

+0

私は 'setVisible(false)'を使ってウィンドウを閉じることを好まないでしょう。画面からウィンドウを隠すだけですが、まだメモリを保持しています。 –

+1

これはdispose()メソッドが入っている場所です。 – Stultuske

+0

これは実際には質問に答えていないので、解説のためのコメントでなければなりません。問題は、コードを含んでいないため、現在の状態では答えることができません。 –

関連する問題