2012-04-02 6 views
0

Ich scheine den obigen Fehler zu bekommen, wenn ich versuche, eine aufrufbare Klasse zu erstellen. Ich habe nach dem Grund gesucht, kann aber nichts finden. NetBeans gibt mir ein paar Optionen, um Dinge abstrakt zu machen, aber ich bin neu und ich würde lieber herausfinden, warum etwas passiert. Kann jemand das aufklären?Aufrufbare Klasse gibt Fehler: doPing ist nicht abstrakt und überschreibt nicht die abstrakte Methode call()?

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

Antwort

2

in Ihrem Code die call Methode hat ein Argument: es nicht überschreiben die call Methode der Callable Schnittstelle - Es sollte wie folgt aussehen:

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

} 

Wenn Sie Java verwenden 6+, Es empfiehlt sich, die Override Annotation zu verwenden, die dabei helfen kann, falsche Methodensignaturen zu erkennen (in diesem Fall wurde bereits ein Kompilierungsfehler festgestellt):

+0

danke für die Antwort :) – DMo

1

Ihre von Doping-Klasse wird als implements Callable<String> definiert. Dies bedeutet, dass es die call()-Methode implementieren sollte, die keine Argumente übernimmt. Hier ist die Definition von Callable:

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

Sie müssen das String IPtoPing Argument entfernen, wenn Sie doPing wollen Callable sein:

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

Danke für die Hilfe. – DMo

1

Die Callable Schnittstelle erfordert, dass Sie eine call() Methode haben. Ihre Methode ist jedoch
call(String ipToPing).

Sie können eine setIpToPing(String ip) Methode hinzufügen, um die richtige IP festzulegen.

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

Danke dafür. sehr geschätzt. IPtoPing ist eine Variable innerhalb meiner Hauptmethode in einer anderen Klasse, also wie wäre ich in der Lage, diese Variable zu call() zu übertragen? – DMo

+0

@ user1286779 Kein Problem. Ich habe ein Beispiel hinzugefügt. – Jim

Verwandte Themen