【问题标题】:How to interrupt/ stop a java ping command in Windows?如何在 Windows 中中断/停止 java ping 命令?
【发布时间】:2013-03-04 11:06:46
【问题描述】:

我得到了一个稍作修改的示例 ping 程序...

    String ip = "192.168.1.1 -t";
    String pingResult = "";      
    String pingCmd = "ping " + ip;

    try{

        Runtime r = Runtime.getRuntime();
        Process p = r.exec(pingCmd);

        Pattern pattern = Pattern.compile("time=(\\d+)ms");
        Matcher m = null;
        BufferedReader in = new BufferedReader(new InputStreamReader(p.getInputStream()));
        String inputLine;
        while ((inputLine = in.readLine()) != null) {
            m = pattern.matcher(inputLine);
            if (m.find()) {
                System.out.println(m.group(1));
            }
        }
        in.close();

    }
    catch (IOException e) {
        System.out.println(e);
    }

我将实现一个包含开始和退出按钮的 GUI,开始按钮有效,但退出按钮无效。当我单击退出按钮时,程序不显示 rtt 时间输出。但是程序实际上并没有退出/停止。我如何完全关闭它,我要添加类似Runtime.getRuntime().addShutdownHook 的内容。

需要一些提示和指南,在此先感谢...

【问题讨论】:

    标签: java runtime interrupt


    【解决方案1】:

    您可以使用 ping 的 -n 参数并在 n 次 ping 后再次启动,或者如果用户需要停止则停止。

    Process 也有一个 OutputStream。当您想停止 ping 时,您可以尝试发送 Ctrl-C。

    【讨论】:

    【解决方案2】:
    boolean isStoped=false;
    
    while ((inputLine = in.readLine()) != null && (!isStoped)) {
                m = pattern.matcher(inputLine);
                if (m.find()) {
                    System.out.println(m.group(1));
                }
            }
    

    当您单击退出按钮时,请创建 isStoped=true 并调用 p.destroy()。希望这会对你有所帮助。

    【讨论】:

    • 非常感谢,但是 p.destroy() 只能停止打印行,但不能停止在线程后台运行的 ping 程序...感谢您的想法...跨度>
    猜你喜欢
    • 2014-12-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多