Zitat Zitat von Engel der Furcht Beitrag anzeigen
Ich hab das ganze mit einem Interface gelöst.
Für so ein Problem sind Interfaces nicht gedacht.

Zitat Zitat von Engel der Furcht Beitrag anzeigen
UNd stehe gerade vor einem erneuten Problem:

Ich hab 'ne Klasse, in der ein Objekt erzeugt wird, das von Thread erbt.
Und hier wäre es nun schlauer, du machst dich mit dem Model-View-Controller-Prinzip vertraut.
Ein Fenster, dass ein Thread startet und auf UDP-Daten wartet ist ein absolutes No-Go.
Dies muss der Controller übernehmen und nicht die View, oder möchtest du in jedem Fenster die selben Methoden implementieren?

IdR wird hierfür ein eigener Thread gestartet, der rein nur fürs Empfangen der Daten zuständig ist. Fenster, die auf empfangene Daten reagieren wollen, registrieren sie sich dann mittels eines Listeners und der Thread gibt dann dem Fenster die nötigen Informationen. Beim Schließen des Fensters muss aber tunlichst darauf geachtet werden, dass sie sie wieder deregistrieren.

Zitat Zitat von Engel der Furcht Beitrag anzeigen
In diesem Thread wartet ein Socket auf Empfang von Daten.
Ich kann den Thread nicht schließen/killen/terminieren/whatever.
Ich kann von der Oberklasse auch nicht auf das Socket zugreifen und es schließen.
Threads sind sowieso sehr böse, wenn man nicht weiß, was man da tut. Als Einführung kannst du dir ja mal den Wiki-Artikel über das Philosophenproblem durchlesen.

Zitat Zitat von Engel der Furcht Beitrag anzeigen
Is das mit dem WindowAdapter eigentlich so richtig, ich kriege immer eine NullpointerException(der receiver existiert doch?)
Ich kann das hier nur überfliegen, aber der Thread wird ja auch erstmal gar nicht gestartet.
Die Methode windowClosing() erzeugst du ja in einer anonymen Unterklasse. Die Unterklasse hat aber einen anderen Namensraum, als deine Oberklasse, und deswegen ist für die Unterklasse reveicer gleich Null. Es gibt nun mehrere Wege:
  • Du benutzt in der Unterklasse ein qualifiziertes this. also anstatt receiver.socket.close(); schreibst du dann UDPTransceiver.this.receiver.socket.close();. Dann weiß die anonyme Unterklasse, dass es auf die umschließende Oberklasse zugreifen soll.
  • Du deklarierst receiver als statisch. Wohlmöglich sogar als final static.


Zitat Zitat von Engel der Furcht Beitrag anzeigen
Jedenfalls kann ich den Thread nicht schließen und habe irgendwie auch sonst keinen Zugriff auf Attribute etc.
Ich kann also receiver.socket.close() nicht anwenden und receiver.status kann ich auch nicht auf false setzen.
receiver.interrupt(), .stop() etc. kann ich auch nicht anwenden.
Um überstürzt einfach versuchen, irgendwelche Methoden aufzurufen, solltest du dich einfach mal kontrollieren, ob die Objekte überhaupt existieren. Wenn du eine Null-Pointer-Exception bekommst, dann heißt das schon, dass da schon irgendwas nicht existiert. Hast du dich eigentlich schon mal mit dem Debugger beschäftigt?

Zitat Zitat von Engel der Furcht Beitrag anzeigen
Als Test ist Sender/Empfängeraddresse auf Localhost gesetzt. "Senden" und "Empfangen" kann ich wohl und auch die ganze Zeit.
Das heißt also, du weißt es nicht? Bei Netzwerk-Programmierung ist es immer vom Vorteil, man hat einen Netzwerk-Sniffer ala WireShark zur Hand und schaut sich die Datenpakete an, die verschickt werden.