【发布时间】:2020-04-01 17:00:29
【问题描述】:
我想将 Netbeans 的 Swing GUI 构建器与 Maven 项目和 java 模块一起使用。如果将它们编译为 java 模块的一部分,则 GUI Builder 似乎无法找到已编译的类。它给出了错误“加载组件时出错(...)无法加载组件类(...)”(请参阅示例末尾的屏幕截图中的整个错误)
我已使用 Netbeans 11 将其固定为一个最小示例:
文件 > 新建项目 > Java with Maven > Java 应用程序(使用默认建议并单击完成)
在“Source Packages”下的项目树中,右键单击并添加一个新的 JFrame 和一个 JPanel。
编译项目(运行 > 构建项目),以便您可以使用 GUI Builder 中的类
使用 GUI Builder,将 JPanel 的实例添加到 JFrame,方法是在设计模式下打开 JFrame,然后将 JPanel 拖到 JFrame。
通过添加文件
src/main/java/module-info.java: 更新项目以使用 java 模块
module MavenGuiTest {
requires java.desktop;
requires java.logging;
}
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.6.1</version>
</plugin>
</plugins>
</build>
再次运行“构建项目”。现在项目已编译完毕。
如果 JFrame 在编辑器中打开,请关闭它。
- 再次打开它,然后切换到“设计”选项卡。
- 现在,您收到一个错误:
点击Show Exceptions时,可以看到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)
我不知道如何修复它,也没有找到任何解决方法。
【问题讨论】:
-
看来您正面临一个已报告并已修复(即将发布的 11.3 版)问题原始 NETBEANS-2963 JIRA NETBEANS-2983 中的清理版本。
-
你能在这里复制并粘贴完整的异常
-
@SubOptimal 该问题似乎与自定义组件和 Gradle 有关。我也遇到了标准组件的问题,我使用的是 Maven,而不是 gradle。你确定它是相关的吗?
-
@Kalana 当然,我已经在问题中粘贴了整个异常。
-
@foolo 我相信它是一样的,基于异常的来源
org.netbeans.modules.form.project.ProjectClassLoader.findClass(ProjectClassLoader.java:163)
标签: java swing maven netbeans java-module