如何使用NetBeans创建可执行的.jar文件

6

我想制作一个“双击”CLI应用程序,但仍然不知道如何操作。 我知道我应该编辑清单,但这就是全部。我当然在谷歌上搜索了,但没有成功。 感谢任何提示。 以下是构建、运行和清单的输出:

compile:
Created dir: /home/nick/NetBeansProjects/SemestralWork/dist
Building jar: /home/nick/NetBeansProjects/SemestralWork/dist/SemestralWork.jar
Not copying the libraries.
To run this application from the command line without Ant, try:
java -jar "/home/nick/NetBeansProjects/SemestralWork/dist/SemestralWork.jar"
jar:
BUILD SUCCESSFUL (total time: 1 second)


java -jar /home/nick/NetBeansProjects/SemestralWork/dist/SemestralWork.jar

Exception in thread "main" java.lang.NoClassDefFoundError: semestralwork/Main
Caused by: java.lang.ClassNotFoundException: semestralwork.Main
    at java.net.URLClassLoader$1.run(URLClassLoader.java:217)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:205)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:319)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:294)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:264)
    at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:332)
Could not find the main class: semestralwork.Main. Program will exit.

MY MANIFEST created with build:

Manifest-Version: 1.0

Ant-Version: Apache Ant 1.7.1

Created-By: 14.0-b08 (Sun Microsystems Inc.)

Main-Class: semestralwork.Main

Class-Path: 

X-COMMENT: Main-Class will be added automatically by build
6个回答

6
这两行文字告诉您所有需要了解的内容:
Exception in thread "main" java.lang.NoClassDefFoundError: semestralwork/Main
Caused by: java.lang.ClassNotFoundException: semestralwork.Main

同时,清单输出还提供了更进一步的线索:

Main-Class: semestralwork.Main

这意味着JAR文件正在寻找一个名为semestralwork的包和其中一个名为Main的类。它失败了,因为它找不到semestralwork包或Main类。
正如你在问题中指出的那样,问题确实出现在清单文件中。您可以直接在JAR文件中进行编辑,但更好的做法是从Netbeans中进行编辑:
- 点击“文件->项目属性(semestralwork)” - 在打开的对话框中,在左侧的树上选择Run - 然后,在右侧,在标记为Main class:的字段下,输入要在命令行中运行时执行的类的完全限定类名 在您的情况下,从@Aaron的答案评论中我看到,如果您的主类在名为encryption.java的文件中,并且它位于默认包中(没有包),只需输入encryption
完成此操作后,请进行清理和构建,然后再次尝试从命令行运行它。
希望有所帮助。

4

由于我遇到了相同的问题,我可以稍微澄清一下解决方案。

您必须在方法之外创建主Java类(例如默认包文件夹),然后在该主类中调用您的方法(文件夹),例如:import your_folder.connected_class;

希望我能帮助有同样问题的人。


1

不使用netbeans,从.jar文件制作.exe文件更容易。 以下是我的建议: 1. 使用特殊应用程序(例如:JSmooth、JEXECreator等)。 2. 制作一个启动JVM的C++程序(参见此tutorial)。


0

默认的类搜索路径可能是问题所在。您应该尝试切换到JAR文件所在的目录,并使用java -jar Semestral.jar启动。另外,您可能会错误地命名主类。请还包括您的包结构。


0

使用ZIP工具打开JAR文件(如果您使用Linux,则可以尝试less ...jar tvf ...)。确保其中有一个名为semestralwork的目录,其中包含一个名为Main.class的文件。


只有一个名为 "encryption.class" 的方法,我从主方法中调用。 - landscape
那就是你的问题了。这个类缺少JAR文件,所以Java找不到它。 - Aaron Digulla

0

很简单。下载一个 netbeans 的副本。在 netbeans 中创建一个新的项目。转到项目资源管理器中的主类。这应该是文件夹“YourProject”,类名为 YOURPROJECT.JAVA。您希望从这个 yourproject.java 文件开始编写代码。只需将代码写入 public static void main 区域即可。您可以使用顶部工具栏的绿色播放按钮运行程序。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接