鉴于以下课程:
public class Menu {
public static void main(String[] args) {
System.out.println("hi");
}
}
我想运行jar文件,但在创建之后我点击menu.jar
但它没有运行。这是为什么?
答案 0 :(得分:3)
如果双击一个jar文件,javaw
用于启动jar文件。 java
和javaw
之间的主要区别在于后者未附加到控制台,因此您将看不到System.out.println
语句的输出。
你可以尝试这两件事:
import javax.swing.*;
public class Menu {
public static void main(String[] args) {
SwingUtilities.invokeLater( new Runnable(){
public void run(){
JFrame frame = new JFrame( "Hi!" );
frame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
frame.setVisible( true );
}
} );
}
}
$> java -jar your-file.jar
hi
答案 1 :(得分:2)
按照页面http://docs.oracle.com/javase/tutorial/deployment/jar/appman.html
中所述的说明进行操作首先,你需要在META-INF文件夹中有Manifest.FM文件,并且在提到的文件中你需要设置Main-Class:classname
答案 2 :(得分:1)
创建.jar
文件时,必须确保.jar
文件知道要运行的程序。这是通过Main-Class
文件中MANIFEST.MF
文件夹中META-INF
文件中的.jar
条目完成的。较新版本的jar
工具支持选项-e
来完成这项工作。
以下Makefile
显示了如何运行各种命令:
.PHONY: all
all: run
.PHONY: run
run: Hello.jar
java -jar Hello.jar
Hello.jar: Hello.class
jar cvfe Hello.jar Hello Hello.class
Hello.class: Hello.java
javac Hello.java
请注意,Makefile
不是构建和运行Java程序的典型方法。我这里只使用Makefile
因为它方便显示为不同的东西执行的裸机命令。通常会使用 Apache Maven mvn
, Apache Ant ant
或gradle
来自动化Java应用程序的构建过程。
当您运行.jar
文件时,根据您启动它的位置(即Windows资源管理器),它实际上可能没有连接终端。 System.out
是JVM进程的stdout
,如果它没有附加到终端,则该消息将不会在屏幕上显示,它将无处可寻(NIL:
在Windows上,UNIX上的/dev/null
。
有两种选择:
cmd.exe
或xterm
或类似的东西,然后使用cd *dirOfJarFile*
然后java -jar *menu.jar*
运行jar文件。< / LI>
我现在推荐第一个选项。
import javax.swing.*;
public class HelloSwing {
public static void main(final String... args) {
final JFrame frame = new JFrame("Hello");
frame.getContentPane.add(new JLabel("Hello, world!"));
frame.pack();
frame.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
frame.setVisible(true);
}
}
答案 3 :(得分:0)
在Windows上打开CMD.exe或在Mac上打开终端并输入以下代码:
java -jar path-to-your-jar-file.jar
例如:
java -jar C:\MyAwesomeJarFile.jar
它应该在控制台中打印Hi
。