【问题标题】:Error when i try to make executable file from .jar file当我尝试从 .jar 文件制作可执行文件时出错
【发布时间】:2014-09-08 02:34:05
【问题描述】:

线程“主”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 数据库文件。

【问题讨论】:

  • 你需要包含你使用的类。
  • 在哪里以及如何?如何在我的 JAR 中包含 IDE 的 AbsoluteLayout 类?
  • 在 JAR 中。这取决于你如何制作 JAR。
  • 检查导入并确保您已包含所需的 jar 文件。确保在创建可执行文件时包含支持的 jar。
  • 我在 Netbeans 工作,在 clean and biuld 项目之后,我得到了 jar 文件。我需要这样做吗?

标签: java netbeans


【解决方案1】:

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

这里有一些简单的步骤和需要寻找的东西(使用 Netbeans)。

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

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

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

    1. 检查以确保库确实在那里。转到 [Files] 选项卡(如果未打开,请转到 [Window]->[Files])并确保库位于 [libs] 目录中:

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

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

      清单版本:1.0
      Ant 版本:Apache Ant 1.9.2
      创建者:1.8.0_20-b26(甲骨文公司)
      类路径:lib/AbsoluteLayout.jar
      X-COMMENT: Main-Class 将由 build 自动添加
      主类:addjardemo.AddJarDemo

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

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

【讨论】:

  • 谢谢,我解决了这个错误。但现在有另一个问题。如何创建一个依赖于数据库的 jar 文件?我的应用从 H2 数据库文件中读写。
  • 你有 H2 罐子吗?只需执行与 AbsolutLayout jar 相同的操作,但是当您右键单击 Library 节点时,选择 Add Jar。
  • 你希望我用这张图片做什么?
  • 这是我要连接的课程i.imgur.com/vjfiBAu.png 这是要打开的框架i.imgur.com/6vBRnlL.png 这是错误i.imgur.com/KVv9BbB.png 构建后我无法访问数据库
  • 你真的需要学习如何调试 NullPointerExceptions。阅读What is a Null Pointer Exception, and how do I fix it?。没有人可以帮助您调试这将图像和代码。对不起。如果您想共享任何代码,请发布代码,而不是异常图像。并复制并粘贴堆栈跟踪
【解决方案2】:

这是我从 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;
    }

这是在包含提取数据的框架中

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();

}

这是我连接到数据库的类

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;
    }                     
}

}

【讨论】:

    猜你喜欢
    • 2012-07-28
    • 1970-01-01
    • 1970-01-01
    • 2015-02-09
    • 1970-01-01
    • 1970-01-01
    • 2014-10-22
    • 1970-01-01
    • 2011-08-19
    相关资源
    最近更新 更多