【问题标题】:Main class not running when .jar is click单击 .jar 时主类未运行
【发布时间】:2015-08-20 10:27:28
【问题描述】:

我正在用 netbeans 编写一个程序并创建一个 .jar 文件。这是我的主要课程:

public class Test {

/**
 * @param args the command line arguments
 */
public static void main(String[] args) {
    //try {
    // TODO code application logic here

    //create an object and execute the function to calculate monthly wage
    CalculateMonthlyWage monthlyWage = new CalculateMonthlyWage();
    monthlyWage.CalculateDailyWorkingDurationFromCSV();

    //round the result to 2 decimal
    BigDecimal result1 = round(monthlyWage.getTotalMonthID1(),2);
    BigDecimal result2 = round(monthlyWage.getTotalMonthID2(),2);
    BigDecimal result3 = round(monthlyWage.getTotalMonthID3(),2);
    System.out.println("1, Janet Java, $"+result1);
    //create Java swing window
    Frame f = new Frame();
    JLabel mLabel = new JLabel();
    f.addWindowListener(new WindowAdapter() {
        public void windowClosing(WindowEvent e) {
            System.exit(0);
        }
    });
    mLabel.setText(convertToMultiline("Monthly Wage 3/2014"
            +"\n1, Janet Java, $"+result1.toString()
            +"\n2, Scott Scala, $"+result2.toString()
            +"\n3, Larry Lolcode, $"+result3.toString()));
    f.add(mLabel);
    f.setSize(500, 500);
    f.setVisible(true);
}    
public static String convertToMultiline(String orig) {
    return "<html>" + orig.replaceAll("\n", "<br>");
}
}

这个类是main,它将创建一个CalculateMonthlyWage类对象,然后调用CalculateDailyWorkingDurationFromCSV()方法。之后它将创建一个窗口并显示结果。

当我尝试使用 IDE 运行时,一切都很好,java 窗口显示了我想要的。但是当我点击 .jar 文件时,什么都没有发生。

当我尝试使用java -jar jarname.jar 从命令行运行它时,我收到以下错误。

Exception in thread "main" java.lang.NoClassDefFoundError: org/joda/time/ReadableInstant

我在这里做错了什么?

编辑

我下载了 Eclipse,创建了一个新项目并将我的源代码复制到其中。现在一切都很好。我还是不明白 Netbeans 出了什么问题

【问题讨论】:

标签: java


【解决方案1】:

也许您还没有将程序编译为可执行 JAR 文件。

【讨论】:

    【解决方案2】:

    您始终可以通过打开命令提示符来检查引发的异常,导航到 jar 所在的目录并调用 java -jar yourJar.jar。如果应用程序的 main 调用正确,则应用程序将启动,否则将抛出异常,以便更好地理解问题。 现在因为您使用 netbeans 导出到 jar ,所以 netbeans 不包含 jar 中的库,而是在清单中添加了可以找到库的位置,所以问题可能一定是这种情况,否则尝试第一个我告诉你的步骤并分享异常。

    【讨论】:

    • 我检查了异常,它说:线程“main”中的异常 java.lang.NoClassDefFoundError: org/joda/time/ReadableInstant
    • 那么您的类路径中没有库,尝试找到 NetBeans 放置 jar 的输出目录,您将在那里看到一个名为 lib 的文件夹。所以为了点击jar并播放,你必须将lib文件夹放在jar的同一目录中
    • 我的文件夹 lib 与 jar 位于同一类路径中。它们都在 dist 文件夹中。它就像 root---dist/src/build/nbproject/manifest.mf---lib 和 jar
    • 库文件夹中有joda-time jar吗?
    • 所以路径类似于../dist/lib../dist/yourJar.jar
    【解决方案3】:

    您必须将其编译为可执行的 Jar 文件。您也可以使用 CMD 手动编译它,移动到您的目录并编译或运行它:

    编译

    javac filename.java
    

    执行中

    java filename
    

    【讨论】:

      猜你喜欢
      • 2016-01-27
      • 2011-01-02
      • 2020-07-28
      • 2019-02-21
      • 1970-01-01
      • 2013-06-30
      • 1970-01-01
      • 2014-08-24
      • 1970-01-01
      相关资源
      最近更新 更多