Netbeans Swing GUI Builder无法与Java模块项目和Maven一起使用

问题描述 投票:2回答:1

我想在Netbeans的Swing GUI构建器中与Maven项目和Java模块一起使用。如果将它们作为Java模块的一部分进行编译,似乎GUI Builder无法找到已编译的类。它给出错误“加载组件(...)时出错,无法加载组件类(...)”(请参见示例末尾的屏幕快照中的整个错误)

我使用Netbeans 11将其固定为一个最小的示例:

  • [文件>新建项目> Java与Maven> Java应用程序(使用默认建议并单击完成)

  • 在项目树中的“源包”下,右键单击并添加一个新的JFrame和一个JPanel。

  • 编译项目(运行>构建项目),以便可以在GUI Builder中使用类

  • 使用GUI Builder,通过在设计模式下打开JFrame并将JPanel拖到JFrame,将JPanel的实例添加到JFrame。

  • 通过添加文件src/main/java/module-info.java

  • 将项目更新为使用Java模块。
module MavenGuiTest {
    requires java.desktop;
    requires java.logging;
}

  • 再次运行“构建项目”。然后,Netbeans检测到它现在是一个Java模块项目,并显示一个对话框:enter image description here

  • 单击是,以下内容将添加到pom.xml:

  •     <build>
            <plugins>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-compiler-plugin</artifactId>
                    <version>3.6.1</version>
                </plugin>
            </plugins>
        </build>
    
    • 再次运行“构建项目”。现在该项目已编译。

  • 如果在编辑器中打开了JFrame,则将其关闭。

  • 再次打开,然后切换到“设计”选项卡。
  • 现在,您得到一个错误:
  • enter image description here

    单击显示例外时,您可以看到GUI Builder无法找到JPanel的已编译类:

    enter image description here

    这里是完整的例外文本:

    java.lang.ClassNotFoundException: com.mycompany.mavenproject1.NewJPanel
        at org.netbeans.modules.form.project.ProjectClassLoader.findClass(ProjectClassLoader.java:163)
        at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:588)
        at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521)
        at org.netbeans.modules.form.project.FormClassLoader.findClass(FormClassLoader.java:58)
        at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:588)
        at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521)
        at java.base/java.lang.Class.forName0(Native Method)
        at java.base/java.lang.Class.forName(Class.java:398)
        at org.netbeans.modules.form.project.ClassPathUtils.loadClass(ClassPathUtils.java:89)
        at org.netbeans.modules.form.FormUtils.loadClass(FormUtils.java:1552)
        at org.netbeans.modules.form.PersistenceObjectRegistry.loadClass(PersistenceObjectRegistry.java:73)
        at org.netbeans.modules.form.GandalfPersistenceManager.restoreComponent(GandalfPersistenceManager.java:673)
        at org.netbeans.modules.form.GandalfPersistenceManager.loadComponent(GandalfPersistenceManager.java:949)
        at org.netbeans.modules.form.GandalfPersistenceManager.loadForm(GandalfPersistenceManager.java:484)
        at org.netbeans.modules.form.GandalfPersistenceManager.loadForm(GandalfPersistenceManager.java:260)
        at org.netbeans.modules.form.FormEditor$2.run(FormEditor.java:327)
        at org.netbeans.modules.form.FormLAF$2.run(FormLAF.java:268)
        at org.netbeans.modules.openide.util.NbMutexEventProvider$Event.doEventAccess(NbMutexEventProvider.java:115)
        at org.netbeans.modules.openide.util.NbMutexEventProvider$Event.readAccess(NbMutexEventProvider.java:75)
        at org.netbeans.modules.openide.util.LazyMutexImplementation.readAccess(LazyMutexImplementation.java:71)
        at org.openide.util.Mutex.readAccess(Mutex.java:225)
        at org.netbeans.modules.form.FormLAF.executeWithLookAndFeel(FormLAF.java:251)
        at org.netbeans.modules.form.FormEditor.loadFormData(FormEditor.java:324)
        at org.netbeans.modules.nbform.FormEditorSupport.loadOpeningForm(FormEditorSupport.java:436)
        at org.netbeans.modules.nbform.FormDesignerTC.loadForm(FormDesignerTC.java:256)
        at org.netbeans.modules.nbform.FormDesignerTC.access$300(FormDesignerTC.java:64)
        at org.netbeans.modules.nbform.FormDesignerTC$PreLoadTask$1.run(FormDesignerTC.java:245)
        at java.desktop/java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:313)
        at java.desktop/java.awt.EventQueue.dispatchEventImpl(EventQueue.java:770)
        at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:721)
        at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:715)
        at java.base/java.security.AccessController.doPrivileged(Native Method)
        at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:85)
        at java.desktop/java.awt.EventQueue.dispatchEvent(EventQueue.java:740)
        at org.netbeans.core.TimableEventQueue.dispatchEvent(TimableEventQueue.java:136)
        at java.desktop/java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:203)
        at java.desktop/java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:124)
        at java.desktop/java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:113)
        at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:109)
        at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
        at java.desktop/java.awt.EventDispatchThread.run(EventDispatchThread.java:90)
    
    

    我不知道如何解决它,也没有找到任何解决方法。

    我想在Netbeans的Swing GUI构建器中与Maven项目和Java模块一起使用。如果编译器类是作为Java的一部分进行编译的,则似乎GUI Builder无法找到它们。

    这只是警告,不是错误。即使发生这种情况,您也可以运行该项目。此警告显示何时发生这些事情。
    当您将一个版本切换到另一版本时。

    您的项目中有未使用或已损坏的库。尝试删除这种库。

      您曾经有一个自定义GUI组件,并且您修改了该类,新的IDE不再识别它。只需按
    1. 允许编辑
    按钮并执行
  • 清理并构建(扫帚和锤子图标)即可。构建完成后,关闭netbeans并重新打开。
  • java swing maven netbeans java-module
    1个回答
    0
    投票
    当您将一个版本切换到另一版本时。
    © www.soinside.com 2019 - 2024. All rights reserved.