0

尝试创建可调用类时,我似乎遇到了上述错误。我已经搜索了原因,但似乎找不到任何东西。NetBeans 为我提供了一些使事情变得抽象的选项,但我对此并不陌生,我宁愿找出发生某些事情的原因。任何人都可以阐明这一点吗?

public class doPing implements Callable<String>{

    public String call(String IPtoPing) throws Exception{

        String pingOutput = null;

        //gets IP address and places into new IP object
        InetAddress IPAddress = InetAddress.getByName(IPtoPing);
        //finds if IP is reachable or not. a timeout timer of 3000 milliseconds is set.
        //Results can vary depending on permissions so cmd method of doing this has also been added as backup
        boolean reachable = IPAddress.isReachable(1400);

        if (reachable){
              pingOutput = IPtoPing + " is reachable.\n";
        }else{
            //runs ping command once on the IP address in CMD
            Process ping = Runtime.getRuntime().exec("ping " + IPtoPing + " -n 1 -w 300");
            //reads input from command line
            BufferedReader in = new BufferedReader(new InputStreamReader(ping.getInputStream()));
            String line;
            int lineCount = 0;
            while ((line = in.readLine()) != null) {
                //increase line count to find part of command prompt output that we want
                lineCount++;
                //when line count is 3 print result
                if (lineCount == 3){
                    pingOutput = "Ping to " + IPtoPing + ": " + line + "\n";
                }
            }
        }
        return pingOutput;
    }
}
4

3 回答 3

2

在您的代码中,该call方法有一个参数:它不会覆盖接口的call方法Callable- 它应该如下所示:

public String call() throws Exception{ //not public String call(String IPtoPing)

}

如果您使用的是 Java 6+,最好不要使用Override注解,这可以帮助发现错误的方法签名(在这种情况下,您已经遇到了编译错误):

@Override
public String call() throws Exception{
}
于 2012-04-02T14:55:35.893 回答
1

您的“doPing”类定义为implements Callable<String>. 这意味着它应该实现不带任何参数call()的方法。这是 的定义:Callable

public interface Callable<V> {
    V call() throws Exception;
}

如果你想成为,你将需要删除String IPtoPing参数:doPingCallable

public class doPing implements Callable<String> {
     // you need to define this method with no arguments to satisfy Callable
     public String call() throws Exception {
         ...
     }
     // this method does not satisfy Callable because of the IPtoPing argument
     public String call(String IPtoPing) throws Exception {
         ...
     }
}
于 2012-04-02T14:53:34.773 回答
1

Callable接口要求你有一个方法call()。但是你的方法是
call(String ipToPing).

考虑添加一种setIpToPing(String ip)方法来设置正确的 ip。

IE

doPing myCallable = new doPing();//Note doPing should be called DoPing to keep in the java naming standards.
myCallable.setIpToString(ip);//Simple setter which stores ip in myCallable
myCallable.call();
于 2012-04-02T14:54:58.940 回答