ich habe versucht ein Programm zu schreiben, welches mir die aktuelle InternetIP meines Rechners in eine Textdatei schreibt, um den per ICS verbundenen Rechner diese dynamische IP mitzuteilen.
Das klappt auch für den Moment des Startens. Wenn dann aber die entsprechende Methode zur Ermittlung von aktueller Zeit und dynamischer IP-Adresse in einer unendlichen Schleife aufgerufen wird, wird nur die Zeit korrekt aktualisiert, nicht aber der Zustand der IP. Das gilt für den Zustand dass ich nicht eingewählt bin und dann einwähle genauso wie andersrum.
das Programm ist an sich gut strukturiert, habe alledings eins nicht verstehen können, nämlich, wird in der Methode dynIP jemals eine ArrayIndexOutOfBoundsException ausgeworfen?
Nun zu deiner Frage, meines Wissens nach wird eine dynamische IP erst dann von einem Provider verteilt wenn man dessen Eingangsnumme eingewählt hat und online ist. Dein Programm ist an sich eine Frame und die ist ohne weiteres nicht Applet fähig. Daher wird die IP auch nie geändert.
wird in der Methode dynIP
jemals eine ArrayIndexOutOfBoundsException ausgeworfen?
ja, denn die catch-Anweisung wird ja planmäßig durchlaufen, wenn beim Start des Programms keine Einwählverbindung steht (sondern - wie in meinem Fall - nur eine lokale IP-Adresse vorliegt). Interessanterweise kommt aber eben nicht zu dieser Ausnahme, wenn ich bereits eingewählt bin und mich dann auslogge. Und genau andersrum besteht das Problem wie gesagt auch: Die Ausnahme wird geworfen, obwohl ich in der Zwischenzeit eine Einwahl gemacht habe.
Vielleicht ist ja das Problem dass ich per DSL eingewählt bin und nicht über Modem oder ISDN. Muss ich nochmal ausprobieren.
Dein Programm ist
an sich eine Frame und die ist ohne weiteres nicht Applet
fähig. Daher wird die IP auch nie geändert.
Ich hatte nie vor ein Applet zu schreiben, sondern eine gewöhnliche Anwendung. Und die Methode public static InetAddress getAllByName(String host)
throws UnknownHostException
kommt ja aus dem Paket java.net und nicht java.applet, insofern sehe ich da nicht so recht den Zusammenhang.
Das Problem liegt vermutlich in diesen beiden Codezeilen:
> InetAddress[] addr = InetAddress.getAllByName(param[0]);
> HostAdresse = addr[1].getHostAddress();
Vielleicht gibts da ein Problem mit der Instanziierung von „addr“? Dass da immer wieder das gleiche Objekt genommen wird und nicht ein neues? Aber die Anweisung mit „new“ funktioniert nicht. Hast Du eine Idee in diese Richtung oder ist das alles so richtig und konsistent programmiert? Oder liegt es an Windows, dass der lokale (NetBIOS-)Computername, den ich als erstes Argument übergebe, nicht richtig mit der o.g. Methode zusammenpasst??