Throws:
IOException - if it was not possible to connect to the server.
IrcException - if the server would not let us join it.
NickAlreadyInUseException - if our nick is already in use on the server.
Da hast du die Doc völlig falsch verstanden; du sollst nicht connect catchen, denn connect ist doch nur die Methode...
Zudem muss in die catch Anweisung nicht nur der Typ der Exception rein, sondern auch ein Bezeichner für eine Variable über welche man dann auf die Exception bei Bedarf zugreifen kann.
Also statt
Code:
...
catch (IOException) {
...
}
muss da ein Bezeichner für eine Variable rein
Code:
...
catch (IOException e) {
...
}
Da ist eine Liste von Exceptions, die geworfen werden können und für diese muss es passende catch-Blöcke geben:
Throws:
IOException - if it was not possible to connect to the server.
IrcException - if the server would not let us join it.
NickAlreadyInUseException - if our nick is already in use on the server.
import org.jibble.pircbot.*;
public class MyBot extends PircBot {
...
} // hier schliesst du die class MyBot offenbar eine Methode zu früh
public void onkick(String channel) {
joinChannel("Channel") ;
}
}
Weil nicht in jedem Programm die komplette Java API geladen wird. Da musst du einfach mal nachschauen, zu welchem Package IOException gehört in der API und eben dieses per import einbinden:
ganz oben noch über dem Class-Namen stehts: java.io
also musst du mindestens
Code:
import java.io.IOException;
schreiben; wenn du viele Klassen aus java.io brauchst, geht auch
Code:
import java.io.*;
Damit wird das gesamte Package importiert.
PS: Man kann im Dos Fenster auch Text markieren, kopieren und woanders einfügen... Dann musst du nicht jedes Mal nen Screenshot dafür senden. Unter XP klickst du einfach mit der rechten Maustaste ins DOS Fenster, dann auf markieren und dann kannst du mit gedrückter linker Maustaste den Text markieren. Ein Rechtsklick befördert das ganze dann in die Zwischenablage.
Habe das jetzt rausgenommen, es funktioniert auch, ich weiß zwar nicht wieso aber es geht, nun ist es aber so, eigentlich sollte er rejoinen wenn er gekickt wird, aber dass mcht er nicht, warum?
Das kommt daher, weil laut Doku die NickNameAlreadyInUseException von der IrcException erbt. Ich weiss nicht, obs was bringt, zuerst den catch-Block für die NickAlreadyInUseException zu schreiben... solltest du jeden falls mal probieren, den catch Block von NickAlreadyInUseException vor den Catch-Block für IrcException zu setzen.
Wenn dann immernoch der gleiche Fehler kommt, gibt es noch eine Möglichkeit. Dann kannst du den catch Block für die IrcException modifzieren und den anderen catch-Block für die NickAlreadyInUseException rausschmeissen:
Code:
...
catch(IrcException e) {
if (e instanceOf NickNameAlreadyInUseException) {
System.out.println("Nickname in Benutzung");
}
else {
System.out.println("Server verweigert Zugang.");
}
}
Der Fehler ist weg, habe einfach den Catch Block mit dem NickAlreadyinUse rausgenommen und dann konnte ich compilieren, aber das ganze Script funktioniert nicht, wenn der Bot gekickt wird, soll er rejoinen aber das macht er nicht. Und wenn er disconnectet oder halt vom Server geschmissen wird, dann soll er wieder connecten, aber das tut er auch nciht!
Der Fehler ist weg, habe einfach den Catch Block mit dem NickAlreadyinUse rausgenommen und dann konnte ich compilieren, aber das ganze Script funktioniert nicht, wenn der Bot gekickt wird, soll er rejoinen aber das macht er nicht. Und wenn er disconnectet oder halt vom Server geschmissen wird, dann soll er wieder connecten, aber das tut er auch nciht!
Du hast die onKick und onDisconnect-Methoden völlig aus Deiner Fantasie heraus angelegt... du musst aber genau die Methoden überschreiben, die vom PircBot aufgerufen werden. Und die sehen nunmal nicht so aus:
Code:
public void ondisconnect() {
...
}
public void onkick(String channel) {
...
}
}
Du musst immer auf Groß/Klein-Schreibung achten und vor allem, dass die gleichen Typen von Variablen in der gleichen Reihenfolge als Parameter übergeben werden. Wenn eine Methode 6 Strings als Parameter erwartet, so kann man diese nicht mit einer Methode überschreiben, die nur 1 String erwartet. Diese Methoden existieren dann beide, weil Java Methoden nicht nur über ihren Namen, sondern auch über die Parameter-Typen unterscheidet.