Javafx获得Ping结果

时间:2014-07-28 11:27:18

标签: java user-interface javafx ping

我已经编写了一个类来ping我提供的IP地址,但它不会返回任何内容。 我尝试添加一些标记来查看它出错的地方,但甚至没有那么有用...... 我有一个gui接口,我使用Label来写出我的数据(之前使用相同的格式使用字符串),这是代码。我确实或不想要某些行,因此“相关”整数,你可以忽略它。这应该在ubuntu 13.10上运行。

public static ArrayList<String> PingIpAddr(String string) throws IOException{
        String s = new String();
        int relevant =0;
        ArrayList<String> List = new ArrayList<String>();
        List.add("it happens \n");
        BufferedReader stdInput = new BufferedReader(new InputStreamReader(new ProcessBuilder(string).start().getInputStream()));
        while ((s = stdInput.readLine()) != null){
             List.add("does this happen? \n");
            relevant++;
            if( (relevant == 2) || (relevant == 3) || (relevant == 4) || (relevant == 5) || (relevant == 6) || (relevant == 9) ){List.add(s + "\n");
            List.add("or this? \n");}}  //end of while
        List.add("This must happen! \n");
        return List;}   //end of Ping

如果这样可行,可以在这里实现:

    String test;
    test = PingIp.testPingIpAddr("ping -c 5 4.2.2.2").toString();
    TeltonikaPing.setWrapText(true);
    TeltonikaPing.setText(test);

奇怪的是,它没有回馈一条线。也许我只是缺少一些非常基本的东西?:/

2 个答案:

答案 0 :(得分:2)

  1. 主要问题是由于ping在大多数情况下有延迟,请尝试使用stdInput.ready()。

  2. 我可能会将此传递给ProcessBuilder:new ProcessBuilder(“myCommand”,“myArg1”,“myArg2”);从其参数中分出命令ping。

  3. 在 - http://docs.oracle.com/javase/7/docs/api/java/lang/ProcessBuilder.html

    我希望这会有所帮助(:

    编辑 - (这可以在下面工作)

    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.util.ArrayList;
    import java.util.List;
    
    public class Pinger
    {
        public static List<String> PingIpAddr(String ip) throws IOException
        {
            ProcessBuilder pb = new ProcessBuilder("ping", ip);
            //ProcessBuilder pb = new ProcessBuilder("ping", "-c 5", ip);
            BufferedReader stdInput = new BufferedReader(new InputStreamReader(pb.start().getInputStream()));        
    
            while (!stdInput.ready())
            {
                // custom timeout handling
            }
    
            String line;
            ArrayList<String> output = new ArrayList<>();
    
            while ((line = stdInput.readLine()) != null)
            {
                output.add(line);
            }
    
            return output;
        }
    
        public static void main(String[] args) throws IOException
        {
            List<String> lines = Pinger.PingIpAddr("127.0.0.1");
    
            for (String line : lines)
            {
                System.out.println(line);
            }
        }
    }
    

答案 1 :(得分:1)

我找到了一个更合适的解决方案,让我输入我想要Ping的时间。

How to run PING command and get ping host summary?

如果其他人需要将其合并到GUI中:)