我刚开始学习java,只知道少量代码,但这仍然是一个简单的程序。它更像是一个恶作剧程序,但主要是测试我是否可以制作一个jar文件。
以下是代码:
import java.awt.*;
import java.awt.event.*;
import java.lang.*;
import java.util.Random;
public class randommouse {
public static void main(String[] args) {
for (int i=1; i<1000; i++) {
Random rand = new Random();
int w = rand.nextInt(1024) + 1;
int h = rand.nextInt(768) + 1;
int t = rand.nextInt(2000) + 1;
try {
Robot r = new Robot();
r.mouseMove(w,h);
Thread.sleep(t);
} catch (AWTException e) {}
catch (InterruptedException e) {}
catch (NullPointerException e) {}
}
}
}
我将其保存到名为randommouse.java
的文件中,
然后使用
javac randommouse.java
这可行,当我使用
运行时java randommouse
它也可以。
然后我尝试创建一个jar文件。我使用命令
jar cvf randommouse.jar randommouse.class
它有效。然后我双击jar文件,它出现错误Java Exception
那么我用
java -jar randommouse.jar
并收到此错误
F:\Java>java -jar randommouse.jar
Exception in thread "main" java.lang.NullPointerException
at sun.launcher.LauncherHelper.getMainClassFromJar(LauncherHelper.java:3
99)
at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:463)
F:\Java>
我是否需要提出一个参数,如果是这样,我将它放在哪里以及如何进行?
提前谢谢你 萨姆
答案 0 :(得分:9)
来自the JDK doc:
为了使此选项起作用,JAR文件的清单必须 包含表格
的一行
Main-Class: classname
这里,classname 标识具有public static void main的类(String [] args) 作为应用程序起点的方法。看到罐子 工具参考页面和Java教程的Jar跟踪 有关使用Jar文件和Jar文件清单的信息。
使用此选项时,JAR文件是所有用户的来源 类和其他用户类路径设置将被忽略。
答案 1 :(得分:3)
您必须设置入口点
$> echo "Main-Class: randommouse" > Manifest
$> jar cfm randommouse.jar Manifest randommouse.class
答案 2 :(得分:2)
答案 3 :(得分:1)
您的代码存在一些与实际问题无关的问题,但很重要。
1)此声明是不必要的:
import java.lang.*;
默认情况下,java.lang
中的每个类都是隐式导入的。您无需明确地执行此操作。
2)这是危险的错误代码:
try {
// ...
} catch (AWTException e) {
} catch (InterruptedException e) {
} catch (NullPointerException e) {
}
您正在捕获最有可能因编程错误而导致的异常,以及丢弃所有证据。至少,您应该打印出某种错误消息...以及可以诊断它的异常堆栈跟踪。
在此特定上下文中(在main
方法中),以下是更好的方法:
try {
// ...
} catch (Throwable e) {
System.err.println("An unexpected error has occurred:");
e.printStacktrace(System.err);
System.exit(1);
}
答案 4 :(得分:1)
我看了一下类的源代码,它似乎试图从属性列表中获取主类属性,这些属性是字符串,然后在找到的主类属性上调用trim()方法。当没有指定主类时,没有主类属性,这会导致搜索方法返回null来表示,并且当调用trim()时,它会导致NullPointerException,因为搜索方法已经返回空值。为避免这种情况,请确保在jar清单中指定了主类:
[directory of class files]>jar -cvmf [name of manifest] MyApp.jar
并确保你已经写好了清单(最后有换行符):
Main-Class: [name of main class]