0

我看过很多关于此的帖子,但我找不到解决我的具体问题的方法。我检查了我如何从 eclipse 导出 jar 的参数,并且我确定包含 main 的类被检查为主类(这个项目中只有一个类)。该程序在eclipse中运行良好。我也使用了一个 bat 文件来尝试运行它,它读取(其中 EDT2 是 jar 的名称):

 java -jar EDT2.jar

我查看了清单文件,内容如下:

 Manifest-Version: 1.0
 Sealed: true
 Main-Class: EDTCompiler2

该文件的主要内容如下:

    public static void main(String[] args) throws IOException, InvalidFormatException {

错误和命令行调用如下所示:

http://s16.postimage.org/droox00sl/Untitled.png 在此处输入图像描述

我看到的另一件不寻常的事情是它在第 53 行出现错误,这是来自外部库的对象声明类型。我在这个程序中使用 apache POI for excel。

4

2 回答 2

1

您的主类需要是一个完全限定的名称。

换句话说,如果EDTCompiler2在,那么您的package org.apache.whatever;JAR 文件需要指定一个Main-Class.org.apache.whatever.EDTCompiler2

于 2012-06-19T18:21:05.173 回答
0

Edwin 的诊断是正确的:在主类的静态初始化程序中,您正在加载另一个加载失败的类。这会引发 NoSuchMethodError 并阻止您的主类加载。因此,最后的错误消息。缺少的方法表明当您在 Eclipse 中运行程序以及在命令行上运行程序时,您正在使用不同版本的 Apache POI 库。

要解决此问题,您有两种选择:

  1. 当您从 Eclipse 导出 JAR 时,请选中“将所需库提取到生成的 JAR”选项。这应该默认选择,但现在似乎不适合您。
  2. 不要将依赖库打包到 JAR 中,而是在使用 -cp 选项调用 java 时将它们添加到类路径中。使用此选项,您必须确保添加正确版本的库。
于 2012-06-19T18:48:24.363 回答