

processing3でゲームを作成しており、メイン画面（以下Ａ画面）から設定画面（以下Ｂ画面）を別ウィンドウで開き、設定が完了したらＢ画面を閉じ、Ａ画面に戻るというプログラムを作りたいです。  
しかし、Ａ画面⇒Ｂ画面は以下のサイトを参考にしてできたのですが、Ｂ画面終了⇒Ａ画面ができません。  
いろいろ調べてみたのですが解決できず、ソースコード（PApplet.java）を読んでみたのですがわからず、お手上げです。  
もしわかる方いましたら、ご教授いただきたいです。  
よろしくお願いします。

【参照サイト】  
複数ウィンドウ表示  
<http://3846masa.blog.jp/archives/1038375725.html>  
PApplet.javaソースコード  
<https://github.com/processing/processing/blob/processing-0243-3.0b5/core/src/processing/core/PApplet.java#L1028-L1031>


CC BY-SA 3.0
2018-04-05T17:28:26.597
42965
2018-10-07T21:17:37.797
28032
question
processing
processing3で複数ウィンドウ表示した場合のサブウィンドウ終了方法


自分もそのサイトを見て、改良したクラスを実際に利用しています。  
SecondAppletクラスに以下の3つのメソッドを追加すると、上手くいきます。

[code]

    void exit(){
      dispose();
    }
    
    void close(){
      surface.setVisible(false); // ウィンドウを消すのに必要
      dispose(); // スレッドを終了するのに必要
    }
    
    void all_close(){
      System.exit(0);
    }
    
[/code]

✖ボタンが押されるとPAppletクラスで定義されたexit()が呼ばれ、恐らくですがSystem.exit(0)に近いものが呼ばれているのでしょう。なのでexit()をオーバーライドしておくと、✖でウィンドウを閉じても全部が消えることがなくなります。ただしスレッドを停止させるためにはdispose()を呼ぶ必要があります。

ついでに、(必要があれば)プログラムからサブウィンドウのみを閉じるメソッドも実装します。close()としました。インスタンスのメソッドとして呼ぶことで、外部からもサブウィンドウのみを終了させることができます。

元々はexit()を呼ぶことでプログラムを終了させることが出来ていたのですが、オーバーライドしたためにサブウィンドウからプログラムを終了させることが出来なくなります。そのサイトのようにメインウィンドウのPAppletを取得して(parentとします)、parent.exit()を呼ぶか、もしくはSystem.exit(0)を呼ぶことでプログラムを終了させられます。

今回の質問の回答としてはexit()の説明のみでよかったのですが、関係のありそうなメソッドの紹介もさせていただきました。  
これを応用すると、メインウィンドウを消してサブウィンドウのみを残すということもできます。


CC BY-SA 4.0
2018-10-03T05:22:16.003
48919
2018-10-07T21:17:37.797
2018-10-07T21:17:37.797
29682
29682
42965
answer