我已经编写了一个类来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);
奇怪的是,它没有回馈一条线。也许我只是缺少一些非常基本的东西?:/
答案 0 :(得分:2)
主要问题是由于ping在大多数情况下有延迟,请尝试使用stdInput.ready()。
我可能会将此传递给ProcessBuilder:new ProcessBuilder(“myCommand”,“myArg1”,“myArg2”);从其参数中分出命令ping。
在 - 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中:)