我的.jar文件不会做任何事情

问题描述:

我创建了一个程序,它或多或少地将一个字符串数组作为对象并随机打印一个。我的.jar文件不会做任何事情

所以basicaly

class Fun 
{ 


     string[] namestrings = new string[#] 

     constructor() 
     { fill with some strings} 

     public static void main (String[]arg) 
     { 
      create instance of class 
      do some junk with it 
      method that prints it 
     } 
     method that prints it {} 
     another method 
    } 

当我编译和命令行上运行它,它工作正常,但当在COMAND行我jar -cf Happy.jar Fun.class

键入我会得到一个名为.jar文件和快乐时我点击它,我得到一个错误消息,读取“的Java Jar文件快乐无法启动阅读可能的错误消息CONSOL”我有一个Mac我正在运行Lepord,如果这使差异。这是怎么回事?

有以下内容的MANIFEST.MF,并将其打包到你的JAR文件中META-INF/MANIFEST.MF

Manifest-Version: 1.0 
Ant-Version: Apache Ant 1.7.1 
Created-By: 14.3-b01 (Sun Microsystems Inc.) 
Main-Class: Fun 

然后,您可以使用执行应用程序

java -jar Happy.jar 

IDE通常会自动为您执行此操作,如果您将项目创建为Java应用程序。

您的命令中不需要.class文件。因此:

java -jar Happy.jar Fun 
+0

然后我得到一个错误,说Funn:没有这样的文件在学术搜索 – David 2010-04-21 05:05:06

+0

你的课是快乐的,所以你需要指定它作为类运行。假设你的jar文件实际上叫做Happy.jar,应该这样做。 – anger 2010-04-21 05:07:32

+0

如果我不在名称中包含Fun,它将如何知道从Fun.class文件获取信息?也为什么不说你编辑了你的文章? – David 2010-04-21 05:07:43

您还可以在JAR的清单中添加Main-Class属性。那么你可以这样做

java -jar Happy.jar 

请参阅this

+0

你能解释吗? – David 2010-04-21 05:09:42

+0

您将FQCN设置为Main-Class属性。然后将清单添加到jar文件中。当你使用'java -jar Happy.jar'来运行你的文件时,虚拟机会查看META-INF/manifest.mf来找出'main'方法的类是什么,然后执行它。请参阅上面的链接 – 2010-04-21 05:36:35

您需要告诉.jar文件运行时它将执行哪个类。

在你的情况听起来很愚蠢的,因为你只有一类,但功能齐全的Java应用程序可能有数百人。

你做到这一点是通过添加名为manifest您告诉罐子的特殊文件的方式,嘿,这是你应该运行的类。

那么试试这个:

// HelloWold.java 
// you know 
public class HelloWorld { 
    public static void main(String [] args) { 
     System.out.printn("Look, I'm running"); 
    } 
} 

保存它HelloWorld.java

编译

$javac HelloWorld.java 

创建manifest.mf文件丝毫此内容:

Main-Class: HelloWorld 

和包装在一起。

$jar -cmf manifest.mf yourJar.jar HelloWorld.class 

创建了一个名为yourJar.jar的文件。

现在,如果您双击它,它将运行,但它会在瞬间消失了,你可以在命令一样通过键入运行它:

$java -jar yourJar.jar 

,并会出现在控制台的消息。

我希望这会有所帮助。