代码之家  ›  专栏  ›  技术社区  ›  Nummern

NetBeans插件-在Swing TopComponent中嵌入JavaFX时出现NullPointer异常,然后最大化

  •  1
  • Nummern  · 技术社区  · 11 年前

    我正在编写一个需要一些图形的NetBeans插件。当我将JavaFX图表嵌入TopComponent时,我看到了NullPointer异常。当我最大化我为插件创建的任何其他TopComponent时,我看到以下异常:

    java.lang.NullPointerException
       at javafx.embed.swing.JFXPanel$HostContainer$1.run(Unknown Source)
       at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:251)
       at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:733)
       at java.awt.EventQueue.access$200(EventQueue.java:103)
       at java.awt.EventQueue$3.run(EventQueue.java:694)
       at java.awt.EventQueue$3.run(EventQueue.java:692)
       at java.security.AccessController.doPrivileged(Native Method)
       at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
       at java.awt.EventQueue.dispatchEvent(EventQueue.java:703)
       at org.netbeans.core.TimableEventQueue.dispatchEvent(TimableEventQueue.java:159)
    [catch] at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:242)
       at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:161)
       at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:150)
       at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:146)
       at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:138)
       at java.awt.EventDispatchThread.run(EventDispatchThread.java:91)
    

    该插件仍在运行,除了弹出异常之外,似乎没有其他问题。TopComponent已注册到

    @TopComponent.Registration(mode = "commonpalette", openAtStartup = true)
    

    和持久性类型 persistenceType=顶部组件.PERSISTENCE_NEVER

    我正在创建图表

    Platform.setImplicitExit(false);
    Platform.runLater(new Runnable() {
            @Override
            public void run() {
                //creating scene here <other code>
                myPanel.setScene(scene);
            }
       });
    

    然后将其直接添加到GroupLayout中的TopComponent

    this.setLayout(layout);
    //then adding myPanel to the layout
    

    如果这也是值得注意的,我也经常看到这个错误

    Dangerous reflection access to sun.misc.SharedSecrets by class com.sun.javafx.tk.quantum.QuantumToolkit$17 detected!
    code location: jar:file:/C:/<my_plugin>/build/cluster/modules/ext/jfxrt.jar!/
    

    但却让人相信我可以忽略这一点?

    之前有没有其他人遇到过这个问题,或者能看出出了什么问题?我尝试过其他布局,检测JavaFX面板何时被移除,但尚未找到解决方案。如有任何建议,我们将不胜感激:)

    作为参考,我的JavaFX版本是2.2.45,带有最新的NetBeans IDE。

    谢谢

    1 回复  |  直到 11 年前
        1
  •  1
  •   Nummern    11 年前

    最终解决了这一问题,它涉及监听topcomponent的jpanel何时变为null,然后删除javafx面板,稍后在显示时进行读取。