📜  .jar 窗口在双击时立即关闭 - Java (1)

📅  最后修改于: 2023-12-03 15:13:03.930000             🧑  作者: Mango

'.jar 窗口在双击时立即关闭 - Java'

当我们在Java中运行一个'.jar'文件时,有时会出现窗口在双击时立即关闭的情况。这是因为运行'.jar'文件时默认不会显示控制台输出,因此我们需要在程序中手动显示控制台窗口。

下面是解决此问题的步骤:

1. 在MANIFEST.MF文件中添加以下内容

在'MANIFEST.MF'文件中添加以下内容:

Main-Class: com.example.Main

其中'com.example.Main'是程序的入口类名称。如果不添加此内容,程序将无法正常启动。

2. 在程序中添加下面的代码

在程序的入口类中添加下面的代码:

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.lang.reflect.Field;
import java.util.Arrays;
import java.util.List;

public class Main {
    public static void main(String[] args) throws Exception {

        // 显示控制台窗口
        if (isWindows()) {
            try {
                ProcessBuilder builder = new ProcessBuilder(Arrays.asList("cmd", "/c", "start", "cmd.exe", "/k", "echo off"));
                builder.redirectErrorStream(true);
                Process process = builder.start();

                // stdin
                InputStream in = process.getInputStream();
                OutputStream out = process.getOutputStream();

                Thread t1 = new Thread(() -> {
                    try {
                        out.write("java -jar YOUR_JAR_FILE_NAME.jar\n".getBytes());
                        out.flush();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                });

                t1.start();

                // stdout
                Thread t2 = new Thread(() -> {
                    byte[] buffer = new byte[4096];
                    int len;
                    try {
                        while ((len = in.read(buffer)) != -1) {
                            System.out.write(Arrays.copyOf(buffer, len));
                            System.out.flush();
                        }
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                });

                t2.start();

                // wait for execution
                process.waitFor();

                // wait for threads to finish
                t1.join();
                t2.join();

            } catch (IOException | InterruptedException e) {
                e.printStackTrace();
            }
        } else {
            // 非windows操作系统下,直接启动程序
            // your code here
        }
    }

    private static boolean isWindows() {
        return System.getProperty("os.name").toLowerCase().startsWith("windows");
    }
}

以上代码中,我们通过ProcessBuilder类实现了打开控制台窗口,并在控制台窗口中运行程序的功能。该代码适用于Windows系统。如果您使用的是其他操作系统,请修改代码以适用于您的系统。

3. 将程序打包为'.jar'文件

在命令行中进入程序根目录,输入以下命令:

jar cvfm YOUR_JAR_FILE_NAME.jar MANIFEST.MF *

其中'YOUR_JAR_FILE_NAME.jar'是您打算生成的'.jar'文件名称。执行此命令后,程序将被打包为一个可执行的'.jar'文件。

以上是解决'.jar 窗口在双击时立即关闭'问题的完整步骤。如果您还有疑问,可以咨询相关专家或使用Java开发者社区的资源进行学习和交流。