Mein Anwendungsfall ist die folgende:JavaFX-Plattform scheint tot zu sein (geschlossen/abgestürzt)
- Ich habe ein GridBagLayout mit 9 Zeilen und 1 Spalte
- ersten 8 Zeilen JPanels
- Letzte Zeile enthalten enthält eine JFXPanel (HTML verwendet, um anzuzeigen, genannt htmlPanel im Code unten)
- I die JFXPanel mit einem der JPanels
I d wechseln wollen o so etwas wie:
if(htmlToFront){
gridBagConstraints.gridy = i - 1;
}
else{
gridBagConstraints.gridy = 8;
}
jPanel1.add(htmlPanel, gridBagConstraints);
gridBagConstraints = new java.awt.GridBagConstraints();
//some other gridbag initializations
if(htmlToFront){
gridBagConstraints.gridy = 8;
}
else{
gridBagConstraints.gridy = i - 1;
}
jPanel1.add(jPanel, gridBagConstraints);
Der Schalter richtig gemacht wird - die JFXPanel und JPanel sind in ihren richtigen Plätzen. Aber die Szene wird nach einigen Umschaltungen nicht mehr angezeigt. Ich meine, nach ein oder zwei Schaltern ist alles in Ordnung, mein HTML-Code im htmlPanel wird richtig angezeigt. Aber nach ein paar weiteren Switches (und ich warte ein paar Sekunden, bevor ich einen Wechsel mache) wird der HTML-Code nicht mehr angezeigt.
Ich habe einige Tests durchgeführt und es scheint, dass Platform.runLater niemals ein Runnable-Objekt aufruft, nachdem dieses Problem auftritt. Es ist, als ob es an einem anderen Job hängenbleibt und ich schätze, das hängt mit der Tatsache zusammen, dass der HTML-Code nicht angezeigt wird (oder die Plattform geschlossen ist, aber ich weiß nicht, wie ich das überprüfen soll oder warum es geschlossen wird).
Warum passiert das? Vielleicht ist die Art, wie ich den Schalter mache, nicht gut? Gibt es ein Problem mit der Tatsache, dass das JFXPanel für einige Millisekunden während des Switch nicht angezeigt werden kann?
Eine allgemeinere Frage wäre warum Platform.runLater nichts tun?
Gibt es einen bestimmten Grund, warum Sie JavaFX und Swing mischen? Es könnte einfacher sein, nur einen zu verwenden. Wie auch immer - das Posten der Teile einschließlich 'Platform.runLater' oder' SwingUtilities.invokeLater' könnte helfen, das Problem zu lokalisieren ... – Itai
Ich brauche Swing, um mit vlcj Filme abzuspielen. vlcj funktioniert nur in Canvas (ich muss bis zu 8 Filme abspielen -> 8 jpanels mit Canvases). Ich muss FX verwenden, weil ich HTML5 Code zusammen mit den Filmen anzeigen muss, die gespielt werden. Ich habe Platform.runLater nur zu Debug-Zwecken aufgerufen, um zu sehen, ob die Plattform noch läuft. Ich nenne es nicht normal - der HTML-Code wird nicht mehr angezeigt, ohne dass ich Platform.runLater oder SwingUtilities.invokeLater aufrufen muss. – Anakin001
Es ist auch kein Problem der Größenanpassung auf 0 Pixel, das fxPanel und die WebView haben die richtige Größe ... – Anakin001