2016-12-22 9 views
0

Ich habe eine einfache Java-Klasse, die ich programmgesteuert ausführen möchte. Dies ist im Grunde ein Video-Player. Es wird auch zusammen mit meiner Webanwendung in Tomcat bereitgestellt. Dies sollte nach einem Klick auf einen bestimmten Link ausgeführt werden. Vom Controller hier ist, wie ich es laufenStandalone-Anwendung in Tomcat

neuen Thread (() -> { VideoPlayer.main (new String [] {}); }). Start();

Es funktioniert gut. Aber jedes Mal, wenn ich den Video-Player schließe, wird Tomcat ebenfalls beendet. Irgendwelche Ideen, wie man das korrigiert?

Antwort

0

Ihre GUI ruft wahrscheinlich System.exit, wenn Sie es schließen. Das bringt Tomcat zum Absturz, da beide in derselben JVM laufen. Finde und entferne die System.exit und du wirst die Dinge besser für dich finden.

Beachten Sie auch, dass es für eine Webanwendung keinen Sinn macht, einen Videoplayer zu starten. Denken Sie darüber nach: Sobald die Webanwendung nicht mehr auf Ihrer eigenen Entwicklungsarbeitsstation läuft, wird das Video auf dem Server abgespielt, wo niemand zu sehen ist. Der Server wird wahrscheinlich nicht einmal einen Monitor haben. Höchstwahrscheinlich erhalten Sie eine Reihe von Ausnahmen vom Videoplayer, die Ihnen mitteilen, dass sie sich nicht selbst initialisieren konnten, da keine Grafikumgebung zum Starten vorhanden ist.

+0

Sie haben Recht! Wenn ich diese Codezeile entfernt habe, wird videoCanel.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE) nicht mehr beendet, wenn der Player geschlossen wird. Dieser Player läuft jedoch immer noch im Hintergrund. Gibt es eine Möglichkeit, diesen Prozess programmatisch zu beenden? –

+0

Auch ich weiß, dass dies sehr hässlich ist. Ich kann mir keine Lösung vorstellen, bei der ich einen Live-Feed von der IP-Kamera in einer Webanwendung, die in Javafx Webview eingebettet ist, abspielen kann. WebView unterstützt keine Plugins und Applets. Hier ist eine SO Frage, die ich mit einigen Details des Projekts http://stackoverflow.com/questions/41262445/embed-ip-camera-feed-on-web-page-and-javafx-webview gepostet habe, die Sie überprüfen möchten gib mir auch Ideen. Vielen Dank :) –

+0

Um den Media Player zu beenden, müssen Sie alle verschiedenen Threads herunterfahren. Es ist praktisch unmöglich, den GUI-Thread herunterzufahren (was kein Daemon-Thread ist), und wenn Sie ihn starten würden, könnten Sie ihn möglicherweise nicht erneut starten. Die beste Strategie wäre, einen völlig neuen Prozess zu starten und dann "EXIT_ON_CLOSE" zu verwenden. –