Java 在没有终端的情况下启动jar文件

Java 在没有终端的情况下启动jar文件,java,eclipse,jar,Java,Eclipse,Jar,我已经将我的Java项目从Eclipse导出为“Runnable JAR文件”,并带有“将所需库提取到生成的JAR中”。当我试图通过双击启动它时,什么也没有发生,只是文件闪烁。当我尝试从终端运行它时,比如java-jarmain.jar,它工作得很好 Main.java class Main { public static void main(String[] args) { System.out.println("Hello"); } 在看到一些stackoverflow答案后,我还提

我已经将我的Java项目从Eclipse导出为“Runnable JAR文件”,并带有“将所需库提取到生成的JAR中”。当我试图通过双击启动它时,什么也没有发生,只是文件闪烁。当我尝试从终端运行它时,比如
java-jarmain.jar
,它工作得很好

Main.java

class Main
{
public static void main(String[] args)
{
   System.out.println("Hello");
}
在看到一些stackoverflow答案后,我还提取了jar文件以检查
MANIFEST.MF
文件

MANIFEST.MF

Manifest-Version: 1.0
Class-Path: .
Main-Class: Main
Java版本

java version "1.8.0_40"
Java(TM) SE Runtime Environment (build 1.8.0_40-b27)
Java HotSpot(TM) 64-Bit Server VM (build 25.40-b25, mixed mode)
操作系统


当您通过双击它来执行它时,它也可以正常工作。但由于该程序非常短,它会快速打印“Hello World”,并再次关闭。这让你觉得什么都没发生。添加代码的最后一行

try{
    Thread.sleep(10000);
}catch(Exception e){}

使其运行更长时间,然后重试。

问题是,当您双击jar文件时,操作系统只会在应用程序的生命周期内启动一个终端。由于您的线路只有一条,并且会立即终止,因此终端也会立即消失

如果您愿意,您可以在完成以下操作后挂起程序:

System.out.println("Hello");
while(true) {
    synchronized (Main.class) {
        try {
            Main.class.wait();
        } catch (InterruptedException e) {
        }
    }
}

它将无限期地等待,直到用户手动终止程序。

什么也没有发生。文件只会闪烁,就这样。如果我完全退出应用程序,终端也不会启动。(如果我自己启动终端并试图双击启动jar,结果也是一样)。什么都没有发生。文件只是闪烁,就是这样。如果我完全退出应用程序,终端不会启动。(如果我自己启动终端并试图通过双击启动jar,结果相同)。
System.out.println("Hello");
while(true) {
    synchronized (Main.class) {
        try {
            Main.class.wait();
        } catch (InterruptedException e) {
        }
    }
}