Вызываемый класс, выдающий ошибку: doPing не является абстрактным и не переопределяет абстрактный вызов метода ()? - PullRequest
0 голосов
/ 02 апреля 2012

Кажется, я получаю вышеуказанную ошибку при попытке создать вызываемый класс.Я искал причину, но, похоже, ничего не нашел.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;
    }
}

Ответы [ 3 ]

2 голосов
/ 02 апреля 2012

В вашем коде у метода call есть аргумент: он не переопределяет метод call интерфейса Callable - он должен выглядеть следующим образом:

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

}

Если вы используете Java 6+, рекомендуется не использовать аннотацию Override, которая может помочь обнаружить неправильные сигнатуры методов (в этом случае вы уже получили ошибку компиляции):

@Override
public String call() throws Exception{
}
1 голос
/ 02 апреля 2012

Для интерфейса Callable требуется метод call(). Однако ваш метод
call(String ipToPing).

Попробуйте добавить setIpToPing(String ip) метод для установки правильного ip.

1011 * Т.е. *

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();
1 голос
/ 02 апреля 2012

Ваш класс doPing определен как implements Callable<String>. Это означает, что он должен реализовывать метод call(), который не принимает аргументов . Вот определение Callable:

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

Вам нужно будет удалить аргумент String IPtoPing, если вы хотите, чтобы doPing было Callable:

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 {
         ...
     }
}
...