Hallo zusammen,
ich habe eine Swing Anwendung die eine JavaFX Application mit einen Preloder startet, und zwar so
Für das Beenden der Anwendung benutze ich Platform.exit(), die Swing Anwendung soll weiterhin laufen und gegebenfalls die JavaFX Anwendung erneut starten. Irgendwie fährt die JavaFX Anwendung beim beenden nicht wirklich runter. Was bedeutet nicht richtig runter fahren. Sobald ich über die Swing Anwendung die JavaFX Application mit den obigen Zeile starte, kommt bei mir diese Fehlermeldung
Kann es sein dass diese Anwendung im Swing UI Thread noch vorhanden ist, dass ich sie nicht mehr starten kann?
Ich habe in die launchApplication Methode reingeschaut
Frage: Wie kann ich eine JavaFX Anwendung richtig runterfahren?
Im JavaDoc steht auch schon dass man die Methode nicht mehrfach starten kann. Was kann ich stattdessen machen?
Ich habe spaßeshalber einfach mal launchCalled.getAndSet(true) vor der Exception auf true gesetzt und ausgeführt, daraus folgt eine neue Meldung mit "Toolkit has excited".
Ich benutze die LauncherImpl hauptsächlich nur wegen der Preloader.
Ich muss die Anwendung auf jeden Fall über die Swing Anwendung starten, da komme ich vorerst nicht drum rum.
ich hoffe das war einigermaßen verständlich beschrieben.
Grüße
lam
ich habe eine Swing Anwendung die eine JavaFX Application mit einen Preloder startet, und zwar so
Code:
LauncherImpl#launchApplication(application, preloader, args)
Für das Beenden der Anwendung benutze ich Platform.exit(), die Swing Anwendung soll weiterhin laufen und gegebenfalls die JavaFX Anwendung erneut starten. Irgendwie fährt die JavaFX Anwendung beim beenden nicht wirklich runter. Was bedeutet nicht richtig runter fahren. Sobald ich über die Swing Anwendung die JavaFX Application mit den obigen Zeile starte, kommt bei mir diese Fehlermeldung
Code:
throw new IllegalStateException("Application launch must not be called more than once");
Kann es sein dass diese Anwendung im Swing UI Thread noch vorhanden ist, dass ich sie nicht mehr starten kann?
Ich habe in die launchApplication Methode reingeschaut
Frage: Wie kann ich eine JavaFX Anwendung richtig runterfahren?
Code:
/**
* This method is called by the standalone launcher.
* It must not be called more than once or an exception will be thrown.
*
* Note that it is always called on a thread other than the FX application
* thread, since that thread is only created at startup.
*
* @param appClass application class
* @param preloaderClass preloader class, may be null
* @param args command line arguments
*/
public static void launchApplication(final Class<? extends Application> appClass,
final Class<? extends Preloader> preloaderClass,
final String[] args) {
if (launchCalled.getAndSet(true)) {
throw new IllegalStateException("Application launch must not be called more than once");
}
if (! Application.class.isAssignableFrom(appClass)) {
throw new IllegalArgumentException("Error: " + appClass.getName()
+ " is not a subclass of javafx.application.Application");
}
if (preloaderClass != null && ! Preloader.class.isAssignableFrom(preloaderClass)) {
throw new IllegalArgumentException("Error: " + preloaderClass.getName()
+ " is not a subclass of javafx.application.Preloader");
}
// System.err.println("launch standalone app: preloader class = "
// + preloaderClass);
// Create a new Launcher thread and then wait for that thread to finish
final CountDownLatch launchLatch = new CountDownLatch(1);
Thread launcherThread = new Thread(() -> {
try {
launchApplication1(appClass, preloaderClass, args);
} catch (RuntimeException rte) {
launchException = rte;
} catch (Exception ex) {
launchException =
new RuntimeException("Application launch exception", ex);
} catch (Error err) {
launchException =
new RuntimeException("Application launch error", err);
} finally {
launchLatch.countDown();
}
});
launcherThread.setName("JavaFX-Launcher");
launcherThread.start();
// Wait for FX launcher thread to finish before returning to user
try {
launchLatch.await();
} catch (InterruptedException ex) {
throw new RuntimeException("Unexpected exception: ", ex);
}
if (launchException != null) {
throw launchException;
}
}
Im JavaDoc steht auch schon dass man die Methode nicht mehrfach starten kann. Was kann ich stattdessen machen?
Ich habe spaßeshalber einfach mal launchCalled.getAndSet(true) vor der Exception auf true gesetzt und ausgeführt, daraus folgt eine neue Meldung mit "Toolkit has excited".
Ich benutze die LauncherImpl hauptsächlich nur wegen der Preloader.
Ich muss die Anwendung auf jeden Fall über die Swing Anwendung starten, da komme ich vorerst nicht drum rum.
ich hoffe das war einigermaßen verständlich beschrieben.
Grüße
lam