【问题标题】:How to create executable .jar file with netbeans如何使用 netbeans 创建可执行的 .jar 文件
【发布时间】:2010-12-29 02:50:17
【问题描述】:

我想制作“双击”cli 应用程序,但仍然不知道如何操作。 我知道我应该以某种方式编辑清单,但仅此而已。我用谷歌搜索了ofc。但没有成功。 感谢您的任何提示。 以下是构建、运行和清单的输出:

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

【问题讨论】:

    标签: java netbeans build jar


    【解决方案1】:

    这两行告诉你所有你需要知道的:

    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 中进行:

    • 点击“文件-->项目属性(半成品)”
    • 在打开的对话框中,在左侧的树上选择Run
    • 然后,在右侧标记为Main class: 的字段下,输入您希望在从命令行运行时执行的类的完全限定类名称

    就您而言,正如我从您对@Aaron 回答的评论中看到的那样,如果您的主类位于名为encryption.java 的文件中,并且它位于默认包(无包)中,则只需输入encryption

    完成后,进行清理和构建,然后再次尝试从命令行运行它。

    HTH

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

        【解决方案3】:

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

        【讨论】:

          【解决方案4】:

          默认的类搜索路径可能是问题所在。您应该尝试将目录更改为 jar 所在的位置并使用 java -jar Semestral.jar 启动。此外,您可能错误地命名了主类。还请包括您的包结构。

          【讨论】:

            【解决方案5】:

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

            【讨论】:

            • 只有一个名为“encryption.class”的方法,我从主方法调用
            • 那是你的问题。该类缺少 JAR,这就是 Java 找不到它的原因。
            【解决方案6】:

            这很容易。下载一份netbeans。在 netbeans 中创建一个新项目。转到 Projects Explorer 中的主类。这应该是文件夹 "YourProject" 作为类 YOURPROJECT.JAVA 。您要从这个 yourproject.java 文件开始。只需将您的代码写入公共静态无效主区域。您可以使用顶部工具栏中的绿色播放按钮运行程序。

            【讨论】:

              猜你喜欢
              • 2016-11-08
              • 2018-08-16
              • 2013-08-20
              • 2017-09-21
              • 2012-12-18
              • 2015-06-01
              • 2015-01-25
              • 1970-01-01
              • 2013-04-07
              相关资源
              最近更新 更多