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

    相关问题