3

我被扔到一個現有的軟件開發項目,該項目是在NetBeans的的Java項目中使用Maven的的NetBeans GUI Builder無法找到SwingX類

我已經從受保護的git倉庫獲取源代碼到新安裝的NetBeans 8.如果我構建並運行它,它會運行。 :-)

我必須編輯使用NetBeans GUI生成器創建的程序的GUI。如果我嘗試打開GUI編輯器,它總是標誌着一些組件extends JXPanel作爲無效由於以下錯誤的,:

java.lang.NoClassDefFoundError:組織/ JDesktop中/ swingx/JXPanel ... 造成拋出java.lang.ClassNotFoundException:org.jdesktop.swingx.JXPanel

我根本不明白它 - 文件swingx-1.6.jarswingx-的BeanInfo-1.6.jar都在依賴項目的一部分(沒有「!」),我將它們添加到Librar我經理,我已經將它們添加到Palette。該程序正在運行,但爲什麼,爲什麼NetBeans GUI Editor無法找到類?

我在做什麼錯?

以下是的pom.xml的摘錄:

<dependency> 
    <groupId>org.jdesktop</groupId> 
    <artifactId>swingx</artifactId> 
    <version>1.6</version> 
    <scope>system</scope> 
    <systemPath>${basedir}/lib/swingx-1.6.jar</systemPath> 
</dependency> 
<dependency> 
    <groupId>org.jdesktop</groupId> 
    <artifactId>swingx.beaninfo</artifactId> 
    <scope>system</scope> 
    <version>1.6</version> 
    <systemPath>${basedir}/lib/swingx-beaninfo-1.6.jar</systemPath> 
</dependency> 
+0

+1。我過去經歷過同樣的問題,沒有解決問題的專業知識:/現在我記得這是我開始手寫GUI的原因之一。順便說一下,我已經用''swing'替換'maven'標籤,因爲:1)它不是一個maven問題(你的庫實際工作)2)你可能會從Swing開發者那裏得到更好的幫助。 – dic19

+0

非常感謝,@ dic19。 :-) – Kurtibert

回答

1

我現在固定 - 感謝@Asprise支持,誰把我推入正確的方向。

問題似乎是,matisse無法處理pom.xml中的<systemPath>${basedir}/...條目。

因此,唯一需要做的就是從存儲庫加載依賴關係。如果它們已經在某個存儲庫中:太棒了。如果沒有,創建自己的地方之一,是指它:

  1. 在項目中創建一個存儲庫目錄,例如:maven-repo
  2. 部署的罐子放入其中:mvn deploy:deploy-file -Durl=file://<absolute-path-to-repo> -Dfile=<path-to-jar> -DgroupId=<groupId-from-pom.xml> -DartifactId=<artifactId-from-pom.xml> -Dpackaging=jar -Dversion=<version-from-pom.xml>
  3. 添加新的存儲庫,以聚甲醛。XML:

    <repositories> 
        <repository> 
         <id>someGreatName</id> 
         <url>file://${basedir}/theNameOfYourRepositoryFolder</url> 
        </repository> 
    </repositories> 
    

(最後兩個步驟來自https://devcenter.heroku.com/articles/local-maven-dependencies

  • 只是可以肯定,空本地Maven緩存,位於~/.m2/repositoryC:\Users\<yourUserName>\.m2\repository
  • 啓動應用程序讓Maven下載所有的依賴關係。
  • 現在,馬蒂斯應該工作 - 它不明白在pom.xml新${basedir}下去,但Maven的呢,和馬蒂斯從Maven的緩存中獲取的依賴關係之後(恕我直言)

    2

    我建議你使用swingx從中央Maven倉庫,而不是你的本地副本 - 我懷疑有一個bug或GUI編輯器無法解析$ {basedir}。這裏是我的設置和它工作得很好:

    <dependencies> 
        <dependency> 
         <groupId>org.swinglabs.swingx</groupId> 
         <artifactId>swingx-all</artifactId> 
         <version>1.6.5</version> 
        </dependency> 
    </dependencies> 
    

    和相應的Java類:

    public class NewJFrame extends javax.swing.JFrame { 
    
    /** 
    * Creates new form NewJFrame 
    */ 
    public NewJFrame() { 
        initComponents(); 
    } 
    
    /** 
    * This method is called from within the constructor to initialize the form. 
    * WARNING: Do NOT modify this code. The content of this method is always 
    * regenerated by the Form Editor. 
    */ 
    @SuppressWarnings("unchecked") 
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents 
    private void initComponents() { 
    
        jXPanel1 = new org.jdesktop.swingx.JXPanel(); 
    
        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE); 
    
        jXPanel1.setBackground(new java.awt.Color(153, 204, 255)); 
    
        javax.swing.GroupLayout jXPanel1Layout = new javax.swing.GroupLayout(jXPanel1); 
        jXPanel1.setLayout(jXPanel1Layout); 
        jXPanel1Layout.setHorizontalGroup(
         jXPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
         .addGap(0, 259, Short.MAX_VALUE) 
        ); 
        jXPanel1Layout.setVerticalGroup(
         jXPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
         .addGap(0, 171, Short.MAX_VALUE) 
        ); 
    
        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane()); 
        getContentPane().setLayout(layout); 
        layout.setHorizontalGroup(
         layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
         .addGroup(layout.createSequentialGroup() 
          .addContainerGap() 
          .addComponent(jXPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) 
          .addContainerGap(131, Short.MAX_VALUE)) 
        ); 
        layout.setVerticalGroup(
         layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
         .addGroup(layout.createSequentialGroup() 
          .addContainerGap() 
          .addComponent(jXPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) 
          .addContainerGap(118, Short.MAX_VALUE)) 
        ); 
    
        pack(); 
    }// </editor-fold>//GEN-END:initComponents 
    
    /** 
    * @param args the command line arguments 
    */ 
    public static void main(String args[]) { 
        /* Set the Nimbus look and feel */ 
        //<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) "> 
        /* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel. 
        * For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html 
        */ 
        try { 
         for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) { 
          if ("Nimbus".equals(info.getName())) { 
           javax.swing.UIManager.setLookAndFeel(info.getClassName()); 
           break; 
          } 
         } 
        } catch (ClassNotFoundException ex) { 
         java.util.logging.Logger.getLogger(NewJFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); 
        } catch (InstantiationException ex) { 
         java.util.logging.Logger.getLogger(NewJFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); 
        } catch (IllegalAccessException ex) { 
         java.util.logging.Logger.getLogger(NewJFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); 
        } catch (javax.swing.UnsupportedLookAndFeelException ex) { 
         java.util.logging.Logger.getLogger(NewJFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); 
        } 
        //</editor-fold> 
    
        /* Create and display the form */ 
        java.awt.EventQueue.invokeLater(new Runnable() { 
         public void run() { 
          new NewJFrame().setVisible(true); 
         } 
        }); 
    } 
    
    // Variables declaration - do not modify//GEN-BEGIN:variables 
    private org.jdesktop.swingx.JXPanel jXPanel1; 
    // End of variables declaration//GEN-END:variables 
    

    }

    +0

    你好@Asprise支持,我已經嘗試了你的建議,但是現在,'org.jdesktop.swingx.editors.EnumPropertyEditor'不能再被找到了。它是否已從SwingX中刪除? – Kurtibert

    +0

    嗨@Kurtibert,似乎類1.6.3存在,所以你可以使用:<依賴性> org.swinglabs.swingx swingx,所有 1.6.3

    +0

    不,我很抱歉,在swingX中沒有這樣的類,至少我沒有找到任何類。我現在修復了 - 明天我會在這裏發佈我的解決方案。非常感謝您的幫助,您將我推向了正確的方向! :-) – Kurtibert

    相關問題