Thanks! It’s working now without using private API. Here is the code if someone will have the same problem:
package com.guigarage.masteringcontrols; import javafx.embed.swing.JFXPanel; import javafx.scene.Scene; import javafx.scene.control.Button; import javafx.scene.layout.StackPane; import javax.swing.*; import java.awt.*; public class JFXPanelDemo1 { private static JButton swingButton; private static Button jfxButton; public static void main(String[] args) { final JFXPanel jfxPanel = new JFXPanel(); SwingUtilities.invokeLater(() -> { JFrame swingFrame = new JFrame("Integrate JavaFX in Swing"); swingFrame.getContentPane().setLayout(new BorderLayout()); swingButton = new JButton("I'm a Swing button"); swingFrame.getContentPane().add(BorderLayout.NORTH, swingButton); swingButton.addActionListener((e) -> { jfxButton.setDisable(!jfxButton.isDisable()); }); swingFrame.getContentPane().add(BorderLayout.CENTER, jfxPanel); jfxButton = new Button("I'm a JavaFX button"); StackPane jfxPane = new StackPane(jfxButton); Scene jfxScene = new Scene(jfxPane); jfxPanel.setScene(jfxScene); jfxButton.setOnAction((e) -> { swingButton.setEnabled(!swingButton.isEnabled()); }); swingFrame.setVisible(true); }); } } Am 03.02.2014 um 13:05 schrieb Artem Ananiev <artem.anan...@oracle.com>: > Hi, Hendrik, > > please, try adding the following line to the very beginning of the main() > method: > > PlatformImpl.startup(() -> {}); > > PlatformImpl is an internal class from com.sun.javafx.application, so it is > not an official way to do the job, it's just a workaround. > > Another option is to wrap all the code after JFXPanel.<init>() into > additional invokeLater(). By the time when JFXPanel constructor is finished, > FX has already set up single threaded event dispatching mechanism, so all the > subsequent Swing events (including invokeLater() calls) are executed on the > right thread. > > Thanks, > > Artem > > On 2/3/2014 3:16 PM, Hendrik Ebbers wrote: >> Hi, >> I’m currently trying the experimental support of the >> javafx.embed.singleThread flag to mix the EDT and JFX Application Thread. >> Therefore I created a demo application. But when I start the app the >> following exception is thrown: >> Exception in thread "AWT-EventQueue-0" java.lang.IllegalStateException: Not >> on FX application thread; currentThread = AWT-EventQueue-0 >> >> I think I’m doing something wrong but currently I have no idea why this is >> not working. Any ideas? >> >> I’m using the folioing JavaFX version: >> >> java version "1.8.0-ea" >> Java(TM) SE Runtime Environment (build 1.8.0-ea-b123) >> Java HotSpot(TM) 64-Bit Server VM (build 25.0-b65, mixed mode) >> >> Here is the code of the demo application: >> >> public class JFXPanelDemo1 { >> >> private static JButton swingButton; >> private static Button jfxButton; >> >> public static void main(String[] args) { >> >> >> SwingUtilities.invokeLater(() -> { >> JFrame swingFrame = new JFrame("Integrate JavaFX in Swing"); >> swingFrame.getContentPane().setLayout(new BorderLayout()); >> swingButton = new JButton("I'm a Swing button"); >> swingFrame.getContentPane().add(BorderLayout.NORTH, swingButton); >> >> swingButton.addActionListener((e) -> { >> jfxButton.setDisable(!jfxButton.isDisable()); >> }); >> >> JFXPanel jfxPanel = new JFXPanel(); >> swingFrame.getContentPane().add(BorderLayout.CENTER, jfxPanel); >> >> jfxButton = new Button("I'm a JavaFX button"); >> StackPane jfxPane = new StackPane(jfxButton); >> Scene jfxScene = new Scene(jfxPane); >> jfxPanel.setScene(jfxScene); >> >> jfxButton.setOnAction((e) -> { >> swingButton.setEnabled(!swingButton.isEnabled()); >> }); >> >> swingFrame.setVisible(true); >> } >> ); >> >> } >> } >>