我尝试从.jar文件生成可执行文件时出错

时间:2014-09-07 13:15:00

标签: java netbeans

线程“main”中的异常java.lang.NoClassDefFoundError:org / netbeans / lib / awtextra / AbsoluteLayout

at ApplicationPackage.StartPage.initComponents(StartPage.java:300)
at ApplicationPackage.StartPage.<init>(StartPage.java:57)
at ApplicationPackage.Main.main(Main.java:30)

引起:java.lang.ClassNotFoundException:org.netbeans.lib.awtextra.AbsoluteLayout

at java.net.URLClassLoader$1.run(Unknown Source)
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
... 3 more

我的代码:

尝试{

 UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");
    } 
    catch (UnsupportedLookAndFeelException | ClassNotFoundException | InstantiationException | IllegalAccessException e) {
        JOptionPane.showMessageDialog(null, e.toString(), "Eroare la aplicarea stilului ferestrei", JOptionPane.ERROR_MESSAGE);
    }

    StartPage frame = new StartPage();
    frame.setVisible(true);      

如何解决这个问题?

更新:我解决了这个错误。 但现在又有另一个问题。我如何创建一个与数据库依赖的jar文件?我的应用程序从H2数据库文件中写入和读取。

2 个答案:

答案 0 :(得分:0)

NoClassDefFoundError通常表示在类路径中找不到该类。

以下是一些简单的步骤和要查找的内容(使用Netbeans)。

  • 添加库时,请执行以下步骤

    1. 从[Projects]资源管理器选项卡右键单击项目中的[Library]节点。
    2. 选择[添加库]。 AbsoluteLayout应该是第一个。

  • 构建项目。如果您尚未更改任何默认构建设置,则应将所有库导出到[lib]文件夹。然后你需要检查一些事情:

    1. 检查以确保库实际存在。转到[文件]选项卡(如果没有打开,请转到[窗口] - >> [文件])并确保库位于[libs]目录中:

      enter image description here

    2. 然后检查以确保库位于类路径中。检查MANIFIEST.MF

      enter image description here

      你应该在classapth上看到libs\AbsuluteLayout.jar

        

      清单 - 版本:1.0
         Ant-Version:Apache Ant 1.9.2
         创建者:1.8.0_20-b26(Oracle Corporation)
         Class-Path:lib / AbsoluteLayout.jar
         X-COMMENT:Main-Class将通过构建自动添加    Main-Class:addjardemo.AddJarDemo

如果这一切都是正确的,这意味着当你运行你的jar时,jar应该与[lib]目录处于同一级别,因为应用程序依赖于那个确切位置的jar(相对于调用jar)。注意:这不是唯一的方法。有关更多信息,我会对“classpath”进行一些研究

如果你想将所有类都包含在你的 jar中,你需要构建一个“Uber Jar”。不确定如何使用Netbeans设置(如果可能的话),但您可以搜索类似的主题,例如this one

答案 1 :(得分:0)

这是我从db

获取数据的功能
 public Vector getData(String query)throws Exception
    {
        Vector<Vector<String>> dataVector = new Vector<>();

        try (Connection myConnection = ConectDataBase.ConectToBD()) {
            PreparedStatement pst = myConnection.prepareStatement(query);
            ResultSet rs = pst.executeQuery();

            while(rs.next())
            {
                Vector<String> films = new Vector<>();
                films.add(rs.getString(1)); 
                films.add(rs.getString(2)); 
                films.add(rs.getString(3)); 
                films.add(rs.getString(4)); 
                films.add(rs.getString(5));
                films.add(rs.getString(6));
                films.add(rs.getString(7));
                films.add(rs.getString(8));
                films.add(rs.getString(9));
                dataVector.add(films);
            }
        }
        return dataVector;
    }

这是在包含extracdet数据的框架中

public ListOfFilms() throws Exception {

        // extragerea datelor din baza de date
        PopulateDataTable dbengine = new PopulateDataTable();
        data = dbengine.getData("SELECT * FROM DataStructure ORDER BY id DESC");
        initComponents();

}

这是我连接db的类

public class ConectDataBase {

Connection myConnection;

public static Connection ConectToBD(){

    try {
        Class.forName("org.h2.Driver");
        Connection myConnection = DriverManager.getConnection("jdbc:h2:~//RatedMovies", "", "");

        return myConnection;
    }
    catch (ClassNotFoundException | SQLException e)
    {
        return null;
    }                     
}

}