JavaFX和Swing可调整大小的JFXPanel
我希望InternalFrame中有一个可调整大小的webview,但我所拥有的崩溃了。这是我的代码:JavaFX和Swing可调整大小的JFXPanel,java,swing,javafx,jfxpanel,Java,Swing,Javafx,Jfxpanel,我希望InternalFrame中有一个可调整大小的webview,但我所拥有的崩溃了。这是我的代码: /** * Create the frame. */ public TestBtn() { setClosable(true); setResizable(true); setMaximizable(true); setIconifiable(true); getContentPane().setBackground(Color.GRAY);
/**
* Create the frame.
*/
public TestBtn() {
setClosable(true);
setResizable(true);
setMaximizable(true);
setIconifiable(true);
getContentPane().setBackground(Color.GRAY);
JFXPanel panel = new JFXPanel();
getContentPane().add(panel, BorderLayout.CENTER);
getContentPane().add(panel, BorderLayout.CENTER);
setBounds(100, 100, 764, 546);
Platform.runLater(new Runnable() {
@Override
public void run() {
initFX(panel);
}
});
this.addComponentListener(new ComponentAdapter() {
@Override
public void componentResized(ComponentEvent e) {
initFX(panel);
}
});
}
private static void initFX(JFXPanel fxPanel) {
// This method is invoked on the JavaFX thread
Scene scene = createScene();
fxPanel.setScene(scene);
}
private static Scene createScene() {
Group root = new Group();
Scene scene = new Scene(root);
WebView view = new WebView();
WebEngine engine = view.getEngine();
engine.onResizedProperty();
engine.load("http://google.bg");
root.getChildren().add(view);
return (scene);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
try {
TestBtn frame = new TestBtn();
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
在尝试最大化InternalFrame窗口后出现此错误:
Exception in thread "AWT-EventQueue-0" java.lang.IllegalStateException: Not on FX application thread; currentThread = AWT-EventQueue-0
at com.sun.javafx.tk.Toolkit.checkFxUserThread(Unknown Source)
at com.sun.javafx.tk.quantum.QuantumToolkit.checkFxUserThread(Unknown Source)
at javafx.scene.web.WebEngine.checkThread(Unknown Source)
at javafx.scene.web.WebEngine.<init>(Unknown Source)
at javafx.scene.web.WebEngine.<init>(Unknown Source)
at javafx.scene.web.WebView.<init>(Unknown Source)
at test.TestBtn.createScene(TestBtn.java:79)
at test.TestBtn.initFX(TestBtn.java:71)
at test.TestBtn.access$0(TestBtn.java:69)
at test.TestBtn$2$1.componentResized(TestBtn.java:63)
at java.awt.Component.processComponentEvent(Unknown Source)
at javafx.embed.swing.JFXPanel.processComponentEvent(Unknown Source)
at java.awt.Component.processEvent(Unknown Source)
at java.awt.Container.processEvent(Unknown Source)
at java.awt.Component.dispatchEventImpl(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
at java.awt.EventQueue.access$500(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue$4.run(Unknown Source)
at java.awt.EventQueue$4.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)
线程“AWT-EventQueue-0”java.lang.IllegalStateException中的异常:不在FX应用程序线程上;currentThread=AWT-EventQueue-0
位于com.sun.javafx.tk.Toolkit.checkFxUserThread(未知源)
位于com.sun.javafx.tk.quantum.QuantumToolkit.checkFxUserThread(未知源)
位于javafx.scene.web.WebEngine.checkThread(未知源)
位于javafx.scene.web.WebEngine。(未知来源)
位于javafx.scene.web.WebEngine。(未知来源)
位于javafx.scene.web.WebView。(未知来源)
在test.TestBtn.createScene(TestBtn.java:79)
位于test.TestBtn.initFX(TestBtn.java:71)
在test.TestBtn.access$0处(TestBtn.java:69)
test.TestBtn$2$1.componentResisted(TestBtn.java:63)
位于java.awt.Component.processComponentEvent(未知源)
位于javafx.embed.swing.JFXPanel.processComponentEvent(未知源)
位于java.awt.Component.processEvent(未知源)
位于java.awt.Container.processEvent(未知源)
位于java.awt.Component.dispatchEventImpl(未知源)
位于java.awt.Container.dispatchEventImpl(未知源)
位于java.awt.Component.dispatchEvent(未知源)
位于java.awt.EventQueue.dispatchEventImpl(未知源)
位于java.awt.EventQueue.access$500(未知源)
在java.awt.EventQueue$3.run处(未知源)
在java.awt.EventQueue$3.run处(未知源)
位于java.security.AccessController.doPrivileged(本机方法)
位于java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(未知源)
位于java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(未知源)
在java.awt.EventQueue$4.run处(未知源)
在java.awt.EventQueue$4.run处(未知源)
位于java.security.AccessController.doPrivileged(本机方法)
位于java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(未知源)
位于java.awt.EventQueue.dispatchEvent(未知源)
位于java.awt.EventDispatchThread.pumpOneEventForFilters(未知源)
位于java.awt.EventDispatchThread.pumpEventsForFilter(未知源)
位于java.awt.EventDispatchThread.pumpEventsForHierarchy(未知源)
位于java.awt.EventDispatchThread.pumpEvents(未知源)
位于java.awt.EventDispatchThread.pumpEvents(未知源)
位于java.awt.EventDispatchThread.run(未知源)
您试图更改Swing线程上的JavaFX组件。我想它在你的组件侦听器中。试试这个
panel.addComponentListener(new ComponentAdapter() {
@Override
public void componentResized(ComponentEvent e) {
Platform.runLater(new Runnable() {
@Override
public void run() {
initFX(panel);
}
});
}
});
你在框架中添加了两次相同的面板。CodeRunner我不明白你的意思我在java中添加了两次面板我是新的^^:DAt第11行和第12行你在同一个地方添加了两次相同的面板。我修复了这一问题,但再次出现了这个错误请发布类的全部代码。这不适用于显示后面的页面maxsimize InternalFrame和页面的small尝试将componentListener添加到JFXPanel。我更新了示例以匹配。