質問: processing3でゲームを作成しており、メイン画面(以下A画面)から設定画面(以下B画面)を別ウィンドウで開き、設定が完了したらB画面を閉じ、A画面に戻るというプログラムを作りたいです。 しかし、A画面⇒B画面は以下のサイトを参考にしてできたのですが、B画面終了⇒A画面ができません。 いろいろ調べてみたのですが解決できず、ソースコード(PApplet.java)を読んでみたのですがわからず、お手上げです。 もしわかる方いましたら、ご教授いただきたいです。 よろしくお願いします。 【参照サイト】 複数ウィンドウ表示 PApplet.javaソースコード
回答: 自分もそのサイトを見て、改良したクラスを実際に利用しています。 SecondAppletクラスに以下の3つのメソッドを追加すると、上手くいきます。 ``` void exit(){ dispose(); } void close(){ surface.setVisible(false); // ウィンドウを消すのに必要 dispose(); // スレッドを終了するのに必要 } void all_close(){ System.exit(0); } ``` ✖ボタンが押されるとPAppletクラスで定義されたexit()が呼ばれ、恐らくですがSystem.exit(0)に近いものが呼ばれているのでしょう。なのでexit()をオーバーライドしておくと、✖でウィンドウを閉じても全部が消えることがなくなります。ただしスレッドを停止させるためにはdispose()を呼ぶ必要があります。 ついでに、(必要があれば)プログラムからサブウィンドウのみを閉じるメソッドも実装します。close()としました。インスタンスのメソッドとして呼ぶことで、外部からもサブウィンドウのみを終了させることができます。 元々はexit()を呼ぶことでプログラムを終了させることが出来ていたのですが、オーバーライドしたためにサブウィンドウからプログラムを終了させることが出来なくなります。そのサイトのようにメインウィンドウのPAppletを取得して(parentとします)、parent.exit()を呼ぶか、もしくはSystem.exit(0)を呼ぶことでプログラムを終了させられます。 今回の質問の回答としてはexit()の説明のみでよかったのですが、関係のありそうなメソッドの紹介もさせていただきました。 これを応用すると、メインウィンドウを消してサブウィンドウのみを残すということもできます。