簡體   English   中英

Netbeans Swing GUI Builder 不適用於 java-module 項目和 Maven

[英]Netbeans Swing GUI Builder not working with java-module project and Maven

我想將 Netbeans 的 Swing GUI 構建器與 Maven 項目和 java 模塊一起使用。 如果將它們編譯為 java 模塊的一部分,則 GUI Builder 似乎找不到已編譯的類。 它給出了錯誤“加載組件時出錯(...)無法加載組件類(...)”(請參閱​​示例末尾屏幕截圖中的整個錯誤)

我已經使用 Netbeans 11 將其固定為一個最小的示例:

  • File > New Project > Java with Maven > Java Application(使用默認建議並單擊完成)

  • 在“Source Packages”下的項目樹中,右鍵單擊並添加一個新的 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 模塊項目並顯示一個對話框: 在此處輸入圖片說明

  • 點擊Yes,在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 在編輯器中打開,請關閉它。

  • 再次打開它,然后切換到“設計”選項卡。
  • 現在,您收到一個錯誤:

在此處輸入圖片說明

點擊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)

我不知道如何修復它,我也沒有找到任何解決方法。

這只是警告而不是錯誤。 即使發生這種情況,您也可以運行此項目。 此警告顯示何時發生這些事情。

  1. 當您將一個版本切換到另一個版本時。
  2. 您的項目中有未使用或損壞的庫。 嘗試刪除那種庫。
  3. 您曾經有一個自定義 GUI 組件,並且您修改了該類,而新的 IDE 不再識別它。 只需按下允許編輯按鈕並執行清理和構建(掃帚和錘子圖標)。 構建完成后,關閉netbeans並重新打開它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM