我想在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
:
module MavenGuiTest {
requires java.desktop;
requires java.logging;
}
单击是,以下内容将添加到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,则将其关闭。
单击显示例外时,您可以看到GUI Builder无法找到JPanel的已编译类:
这里是完整的例外文本:
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无法找到它们。
您的项目中有未使用或已损坏的库。尝试删除这种库。
netbeans
并重新打开。