2

操作後に再起動したいフレームに問題があります。具体的には、 の先頭の下Frame:

public static void startHome() {
    EventQueue.invokeLater(new Runnable() {
        public void run() {
            try {
                frame = new HomeGUI();
                frame.setVisible(true); 
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    });
}

フレームの下:

public HomeGUI() throws IOException, InstantiationException, IllegalAccessException {
        setIconImage(Toolkit.getDefaultToolkit().getImage(ico_path));
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setBounds(100, 100, 669, 516);
// etc...

再起動のための実際のコードの下ですが、機能しません:

frame.dispose();
startHome();

メソッドに入る前に処理が停止しますrun()frame = nullbeforeinvokeLaterと afterを設定しようとしましdispose()たが、うまくいきません。

皆さんありがとうございます

4

1 に答える 1

1
  1. (再)使用するには2つの方法があります(再起動する意図はありません)

    • setIconImage()

    • CardLayout

  2. 必ずsetDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 現在の JVM を終了する

  3. 適切なLayoutManager, JComponent(s) は にPreferredSize戻ってからJFrame呼び出す必要があります

    • JFrame.pack()
    • JFrame.setLocation()
    • JFrame.setVisisble(true)
    • コンストラクターの最後のコード行として
    • AbsoluteLayour などを使用する理由が見つからないためsetBounds(100, 100, 669, 516);
  4. dispose()またはsetDefaultCloseOperation(JFrame.HIDE_ON_CLOSE);と同じです。配列を反復することにより、現在の JVM からsetVisible(false)すべてを取得できます。Top-Level ContainersWindow[] wins = Window.getWindows();

于 2013-07-24T13:24:04.437 に答える