как закрыть приложение javafx при закрытии окна?

<p>в swing вы можете просто использовать <code>setdefaultcloseoperation()</code>, чтобы закрыть все приложение, когда окно закрыто.</p><p>однако в javafx я не могу найти эквивалент. у меня открыто несколько окон, и я хочу закрыть все приложение, если окно закрыто. как это сделать в javafx?</p><p>правка:</p><p>я понимаю, что могу переопределить функцию <code>setoncloserequest()</code> для выполнения какой-либо операции при закрытии окна. вопрос в том, какую операцию нужно выполнить, чтобы прекратить работу всего приложения?</p><pre><code>stage.setoncloserequest(new eventhandler<windowevent>() { @override public void handle(windowevent event) { stop(); } }); </code></pre><p>метод <code>stop()</code>, определенный в классе <code>application</code>, ничего не делает.</p>

<p>приложение автоматически останавливается, когда закрывается последняя <code>stage</code>. в этот момент вызывается метод <code>stop()</code> вашего класса <code>application</code>, поэтому вам не нужен эквивалент <code>setdefaultcloseoperation()</code></p><p>если вы хотите остановить приложение до этого, вы можете вызвать <code>platform.exit()</code>, например, в своем вызове <code>oncloserequest</code>.</p><p>вы можете получить всю эту информацию на странице javadoc <code>application</code>: <a href="http://docs.oracle.com/javafx/2/api/javafx/application/application.html">http://docs.oracle.com/javafx/2/api/javafx/application/application.html</a> </p>

<p>некоторые из предоставленных ответов не работают для меня (javaw.exe все еще работает после закрытия окна) или eclipse выдает исключение после закрытия приложения.</p><p>с другой стороны, это прекрасно работает:</p><pre><code>primarystage.setoncloserequest(new eventhandler<windowevent>() { @override public void handle(windowevent t) { platform.exit(); system.exit(0); } }); </code></pre>

<p>для справки, вот минимальная реализация с использованием java 8:</p><pre><code>@override public void start(stage mainstage) throws exception { scene scene = new scene(new region()); mainstage.setwidth(640); mainstage.setheight(480); mainstage.setscene(scene); //this makes all stages close and the app exit when the main stage is closed mainstage.setoncloserequest(e -> platform.exit()); //add real stuff to the scene... //open secondary stages... etc... } </code></pre>

<pre><code>stage.setoncloserequest(new eventhandler<windowevent>() { @override public void handle(windowevent event) { platform.exit(); system.exit(0); } } </code></pre>

<p>вы пробовали это .. <a href="http://docs.oracle.com/javafx/2/api/javafx/stage/window.html#setoncloserequest%28javafx.event.eventhandler%29">setoncloserequest</a> </p><pre><code>setoncloserequest(eventhandler<windowevent> value) </code></pre><p>есть один <a href="https://forums.oracle.com/forums/thread.jspa?threadid=2335823">пример</a> </p>

<p>используя java 8 это сработало для меня:</p><pre><code>@override public void start(stage stage) { scene scene = new scene(new region()); stage.setscene(scene); /* ... other stuff ... */ stage.setoncloserequest(e -> { platform.exit(); system.exit(0); }); } </code></pre>

<p>казалось, это работает для меня:</p><pre><code>eventhandler<actionevent> quithandler = quitevent -> { system.exit(0); }; // set the handler on the start/resume button quit.setonaction(quithandler); </code></pre>

<p>getcontentpane.remove (jfxpanel); </p><p>попытайся (:</p>

<p>для меня работает только следующее:</p><pre><code>primarystage.setoncloserequest(new eventhandler<windowevent>() { @override public void handle(windowevent event) { platform.exit(); thread start=new thread(new runnable() { @override public void run() { // todo auto-generated method stub system.exit(0); } }); start.start(); } }); </code></pre>

<p>пытаться</p><pre><code> system.exit(0); </code></pre><p>это должно завершить основной поток и завершить основную программу</p>