2012-04-02 2 views
0

Кажется, что я получаю вышеуказанную ошибку при попытке сделать класс, вызываемый. Я искал причину, но не могу найти ничего. NetBeans дает мне несколько вариантов, чтобы сделать вещи абстрактными, но я новичок в этом, и я лучше узнаю, почему что-то происходит. Может ли кто-нибудь пролить свет на это?Ошибка вызываемого класса: doPing не является абстрактным и не отменяет вызов абстрактного метода()?

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; 
    } 
} 

ответ

2

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

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

} 

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

@Override 
public String call() throws Exception{ 
} 
+0

спасибо за ответ :) – DMo

1

Ваш класс «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 { 
     ... 
    } 
} 
+0

Спасибо за помощь. – DMo

1

Интерфейс Callable требует у вас есть метод call(). Однако ваш метод:
call(String ipToPing).

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

I.e.

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(); 
+0

Спасибо за это. очень признателен. IPtoPing - это переменная в моем основном методе в другом классе, так как я могу переносить эту переменную на вызов()? – DMo

+0

@ пользователь1286779 проблем нет. Я добавил пример. – Jim

Смежные вопросы

 Смежные вопросы