2011-09-13 146 views
3

我写了一个程序:创建可执行的JAR

public class SystemShutdown { 
    public static void main(String[] args) { 
     try{ 
      for(int i=0;i<10;i++){ 
       Thread.sleep(1000); 
      } 
      Process p=Runtime.getRuntime().exec("shutdown -s -t 2700"); 
     }catch(Exception e){} 
    } 
} 

我已经编制并保持.class文件分开。现在

,我会写一个清单文件为:

Manifest-Version: 1.0 
Main-Class: SystemShutdown 

而且保存的名称MANIFEST.MF

我把在同一目录下同时使用两者(.class文件和MANIFEST.MF文件)。

现在我想创建一个Executable Jar文件。为此我做了:

jar cvfm MyJar.jar *.* 

之后创建一个jar文件。 但是当我试图执行它时会显示一条消息Java Exception occured

有人可以帮我吗? 我想在用户双击上执行这个程序。

除了上面的划痕,任何人都可以告诉我要创建一个可执行jar的准确步骤吗?

我使用Windows7 32bitjdk7

+1

任何特定的Java异常?一条消息将有所帮助;堆栈跟踪更是如此。清单可能是这里的罪魁祸首。 –

+0

@Captain:没有特别的例外。有一个错误消息:Java Exception occured –

+0

即使你在控制台窗口中运行它?你在用什么IDE?你是否记下这个? –

回答

9

jar命令行的m选项是说你会提供清单文件作为下列参数(在这种情况下,jar文件本身后)。所以我怀疑你想:

jar cvfm MyJar.jar MANIFEST.MF SystemShutdown.class 

有关详细信息,请参阅jar tool documentation

编辑:我刚刚试过这个,它工作正常。代码:

// In Test.java 
public class Test { 
    public static void main(String[] args) { 
     System.out.println("Hello"); 
    } 
} 

// Manifest in MANIFEST.MF: 
Manifest-Version: 1.0 
Main-Class: Test 

命令行和输出:

javac Test.java 
jar cvfm test.jar MANIFEST.MF Test.class 
java -jar test.jar 
Hello 

请注意,如果你没有在清单中Main-Class线的线路终结器,这将导致一个错误,但它是更好的指定:

Failed to load Main-Class manifest attribute from test.jar 
+0

仍然是问题,因为它是 –

+0

@Mohammad:嗯,我只是尝试完全相同的事情,它运作良好。如果它失败了,也许这是一个JRE问题?你在哪个平台上?你有没有试过运行一个类似的测试应用程序* *不*试图关闭机器? –

+0

我使用jdk7。你曾试过哪一个? –

相关问题