Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在关闭Java窗口之前,单击按钮时执行Java bat文件_Java_Batch File - Fatal编程技术网

在关闭Java窗口之前,单击按钮时执行Java bat文件

在关闭Java窗口之前,单击按钮时执行Java bat文件,java,batch-file,Java,Batch File,我有一个按钮,我想要的是点击这个按钮来执行一个bat文件背景,它将在一个文件夹中生成一个文件,Java窗口仍然在那里 但是在我的代码中,我需要关闭Java窗口来执行bat文件 你能帮我查一下我需要在哪里换车吗 我不需要看蝙蝠屏幕。谢谢 final JButton importMap = new JButton("Import"); importMap.addMouseListener(new MouseAdapter() { public void mouseClick

我有一个按钮,我想要的是点击这个按钮来执行一个bat文件背景,它将在一个文件夹中生成一个文件,Java窗口仍然在那里

但是在我的代码中,我需要关闭Java窗口来执行bat文件

你能帮我查一下我需要在哪里换车吗

我不需要看蝙蝠屏幕。谢谢

final JButton importMap = new JButton("Import");

    importMap.addMouseListener(new MouseAdapter() {
        public void mouseClicked(MouseEvent arg1) {

            //String osm = osmFile_path.replaceAll("\\","\\\\");
            System.out.println("You are going to import:"+osmFile_path);
            //Runtime.getRuntime().exec()
            try {
                FileWriter fw2 = new FileWriter("C:\\SUMO\\bin\\OSMTEST.bat");
                fw2.write("@echo off");
                fw2.write("\r\n");
                fw2.write("cmd");
                fw2.write("\r\n");
                fw2.write("set default_dir=C:\\SUMO\\bin");
                fw2.write("\r\n");
                fw2.write("start /b C:\\SUMO\\bin\\netconvert --osm-files="+osmFile_path+" --output-file="+osmnet_file);
                fw2.close();
                Runtime.getRuntime().exec("cmd.exe /C start /b C:\\SUMO\\bin\\OSMTEST.bat");
            } catch(IOException e) {
                e.printStackTrace();
            }
        }
    });

    content.add(importMap);

您不应该在
Runtime.getRuntime.exec()
参数中使用
start
参数。它导致打开一个新窗口以执行指定的命令

这应该行得通


Runtime.getRuntime().exec(“cmd.exe/C:\\SUMO\\bin\\OSMTEST.bat”)

您确实应该使用以下代码:

    try {
    FileWriter fw2 = new FileWriter("C:\\SUMO\\bin\\OSMTEST.bat");
    fw2.write("@echo off");
    fw2.write("\r\n");
    //fw2.write("cmd");//No need to specify this line
    fw2.write("\r\n");
    fw2.write("set default_dir=C:\\SUMO\\bin");
    fw2.write("\r\n");
    fw2.write("start /b C:\\SUMO\\bin\\netconvert --osm-files="+osmFile_path+" --output-file="+osmnet_file);
    fw2.write("\r\n");
    fw2.write("Exit");//To close bat file
    fw2.write("\r\n");
    fw2.close();
    Process process = Runtime.getRuntime().exec("rundll32 url.dll,FileProtocolHandler " + "C:\\SUMO\\bin\\OSMTEST.bat");//use the protoclhandler
    process.waitFor();//Waits the process to terminate
    if (process.exitValue() == 0)
    {
        System.out.println("Process Executed Successfully");
    }
} catch(Exception e) {//Process.waitFor() can throw InterruptedException
e.printStackTrace();
}

谢谢你的代码运行良好,但有一点例外。它说process.waitFor()有一个错误;我把它取下来就没事了。你知道为什么吗?@JiayiGuo我很高兴。:)。那个例外情况是什么?@JiayiGuo:Process.waitFor()抛出
InterruptedException
。如果您没有捕捉到这一点,那么它将导致编译时错误。这就是为什么我将代码中捕获的异常更改为
异常
。。!!此语句对于分析进程是否成功执行非常有用,因此在代码中包含这些行是非常必要的。谢谢!我没有注意到“异常”的区别。我添加了异常捕获,然后它就通过了。非常感谢。