Ich habe meinen Kopf mit JavaFx worden Zerschlagung ...JavaFX starten eine andere Anwendung
Diese für funktioniert, wenn keine Instanzen einer Anwendung läuft es:
public class Runner {
public static void main(String[] args) {
anotherApp app = new anotherApp();
new Thread(app).start();
}
}
public class anotherApp extends Application implements Runnable {
@Override
public void start(Stage stage) {
}
@Override
public void run(){
launch();
}
}
Aber wenn ich new Thread(app).start()
innerhalb Eine andere Anwendung Ich bekomme eine Ausnahme, die besagt, dass ich nicht zwei Starts machen kann.
Auch meine Methode durch einen Beobachter auf der anderen Anwendung wie folgt aufgerufen wird:
innerhalb einer JavaFX-Klasse wie diese@Override
public void update(Observable o, Object arg) {
// new anotherApp().start(new Stage());
/* Not on FX application thread; exception */
// new Thread(new anotherApp()).start();
/* java.lang.IllegalStateException: Application launch must not be called more than once */
}
Es ist:
public class Runner extends Applications implements Observer {
public static void main(String[] args) {
launch(args);
}
@Override
public void start(Stage stage){
//...code...//
}
//...methods..//
//...methods..//
@Override
public void update(Observable o, Object arg) {
//the code posted above//
}
}
versuchte ich ObjectProperties mit Hörer verwenden, aber es hat nicht funktioniert. Ich muss diese neue Stufe von der update-Methode von java.util.observer in irgendeiner Weise ausführen.
Alle Vorschläge sind willkommen. Vielen Dank.
Ist nur Ihre Absicht, ein nother Fenster zu öffnen? Wenn ja, können Sie eine neue "Bühne" im UI-Thread erstellen: "final Stage stage = new Stage(); stage.setScene (yourScene); stage.show(); ' – Vertex
Ja, ich möchte ein anderes Fenster öffnen (Anwendung in einer anderen Klasse), aber ich muss es innerhalb der Update-Methode von java.util.observer tun, nicht vom UI-Thread. –
Sie können eine Menge Code im UI-Thread ausführen, indem Sie die Methode 'runLater' aufrufen:' Platform.runLater (neu Runnable() {@Override public void run() {// wird im UI-Thread ausgeführt}}); ' Sie können es also innerhalb der 'update' Methode aufrufen. – Vertex