Учитывая следующий класс:
public class Menu {
public static void main(String[] args) {
System.out.println("hi");
}
}
Я хочу запустить jar файл, но после его создания я нажимаю на menu.jar
но он не запускается. Почему это?
Если вы дважды щелкните файл jar javaw
, используется для запуска файла jar. Основное различие между java
и javaw
заключается в том, что более поздняя 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
Следуйте инструкциям, описанным на странице: http://docs.oracle.com/javase/tutorial/deployment/jar/appman.html.
Прежде всего вам нужно иметь файл Manifest.FM в папке META-INF, и в указанном файле вам нужно установить Main-Class: classname
Когда вы создаете файл .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 Explorer), на самом деле он не может иметь никакого терминала. System.out
является stdout
процесса JVM, и если он не подключен к терминалу, сообщение не будет отображаться на экране, оно не будет отображаться (NIL:
в Windows, /dev/null
в UNIX).
Существует два варианта:
cmd.exe
или xterm
или что-то в этом роде, и запустите файл jar там, используя cd *dirOfJarFile*
затем java -jar *menu.jar*
.На данный момент я рекомендую первый вариант.
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);
}
}
Откройте CMD.exe в Windows или на Mac и введите следующий код:
java -jar path-to-your-jar-file.jar
Например:
java -jar C:\MyAwesomeJarFile.jar
Он должен печатать Hi
в консоли.