如何在Java中停止命令行进程

如何在Java中停止命令行进程,java,command-line,cmd,Java,Command Line,Cmd,我有一个程序,允许用户按下一个按钮,然后它运行一个命令行语句,用户可以看到它的输出 我现在想知道是否有可能在命令完成之前停止它。 在正常运行命令提示符时,我知道命令“ctrl+c”,但是,我不确定如何在java程序中实现这一点 runButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent r) { JFrame runFrame = new JFrame

我有一个程序,允许用户按下一个按钮,然后它运行一个命令行语句,用户可以看到它的输出

我现在想知道是否有可能在命令完成之前停止它。 在正常运行命令提示符时,我知道命令“ctrl+c”,但是,我不确定如何在java程序中实现这一点

runButton.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent r) {
        JFrame runFrame = new JFrame("Running process...");
        runFrame.setSize(500, 400);
        runFrame.setDefaultCloseOperation(DISPOSE_ON_CLOSE);
        runFrame.setLayout(null);
        JButton somethingButton = new JButton("Stop");
        JButton closeButton = new JButton("Close");
        somethingButton.setBounds(65, 290, 105, 25);
        closeButton.setBounds(335, 290, 105, 25);
        JTextArea run = new JTextArea();
        JScrollPane runSP = new JScrollPane(run);
        runSP.setBounds(65, 50, 375, 200);
        run.setLineWrap(true);
        run.setWrapStyleWord(true);
        run.setEditable(false);
        runFrame.add(runSP);
        runFrame.add(somethingButton);
        runFrame.add(closeButton);
        runFrame.setVisible(true);
        //Start of creating of command line stuff
        Runtime runtime = Runtime.getRuntime();
        Process process = null;
        try {
            process = runtime.exec("ping riot.de");
        } catch (IOException e1) {
            System.err.print("Error: " + e1);
            e1.printStackTrace();
        }
        try {
            StringBuilder sb = new StringBuilder();
            BufferedReader br = new BufferedReader(new InputStreamReader(process.getInputStream()));
            String line;
            while ((line = br.readLine()) != null) {
                sb.append(line);
                sb.append("\n");
            }
            run.setText(sb.toString());
        } catch (IOException e) {
            System.err.println("Error: " + e);
        }

        closeButton.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent c) {
                runFrame.dispose();
            }
        });

        somethingButton.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent c) {
                //CODE TO STOP HERE
            }
        });
    }
});


尝试使用上述代码来分解进程
process.destroy()

尝试使用提到的代码销毁进程
process.destroy()

系统。退出(0);不适合你吗?@Stultuske我不想关闭整个程序。这是一个小片段。所以。。。您想“停止”应用程序,而不“停止”应用程序?你是说中断一个线程?@Stultuske所以我在Java中运行一个命令行语句。我想在不结束Java应用程序的情况下停止命令行语句,您是说like?System.exit(0);不适合你吗?@Stultuske我不想关闭整个程序。这是一个小片段。所以。。。您想“停止”应用程序,而不“停止”应用程序?你是说中断一个线程?@Stultuske所以我在Java中运行一个命令行语句。我想在不结束Java应用程序的情况下停止命令行语句。你的意思是什么?谢谢,我来看看。我得到了这个错误:在封闭范围中定义的局部变量进程必须是最终的或有效的。我相信问题是runButton.addActionListener()中本地声明的runFrame对象的bcz但是在closeButton.addActionListener()的内部类中引用了。编译器希望将其声明为finalSorry。因此,我仍然不知道堆栈跟踪。是这个吗?线程“AWT-EventQueue-0”java.lang中出现异常。错误:未解决的编译问题:在封闭作用域中定义的局部变量进程必须是final或有效final,位于MainFrame$4$2。actionPerformed(MainFrame.java:177)位于javax.swing.AbstractButton.fireActionPerformed(未知源代码)正确@Plumel,我已经在上一篇评论中公布了问题的原因。谢谢,我会仔细看看我遇到了这个错误:在封闭范围中定义的局部变量过程必须是最终的或有效的。我相信问题是runButton.addActionListener()中本地声明的runFrame对象的bcz但是在closeButton.addActionListener()的内部类中引用了。编译器希望将其声明为finalSorry。因此,我仍然不知道堆栈跟踪。是这个吗?线程“AWT-EventQueue-0”java.lang中出现异常。错误:未解决的编译问题:在封闭作用域中定义的局部变量进程必须是final或有效final,位于MainFrame$4$2。actionPerformed(MainFrame.java:177)位于javax.swing.AbstractButton.fireActionPerformed(未知源代码)正确@Plumel,我已经在之前的评论中发布了问题的原因。