Ich hab das ganze mit einem Interface gelöst.
UNd stehe gerade vor einem erneuten Problem:
Ich hab 'ne Klasse, in der ein Objekt erzeugt wird, das von Thread erbt.
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.
Hier mal mein Programmcode:
package UDP;
import java.io.IOException;
import java.net.*;
import java.util.logging.Level;
import java.util.logging.Logger;
public class Receiver extends Thread implements Runnable, ReceiverInterface
{
private InetAddress receiveIp;
public DatagramSocket socket;
public DatagramPacket packet;
private byte[] buffer;
private String message;
public boolean status = true;
ReceiverInterface receiverInterface;
public Receiver(InetAddress receiveIp, ReceiverInterface receiverInterface)
{
message = "";
this.receiverInterface = receiverInterface;
this.receiveIp = receiveIp;
run();
}
public void run()
{
while (status)
{
buffer = new byte[4098];
packet = new DatagramPacket(buffer, buffer.length);
try
{
socket = new DatagramSocket(4711);
try
{
socket.receive(packet);
logMessage(new String(buffer), receiveIp);
socket.close();
}
catch (IOException ex)
{
System.out.println(ex);
}
}
catch (SocketException ex)
{
System.out.println(ex);
}
}
interrupt();
}
public void logMessage(String message, InetAddress receiveIp)
{
receiverInterface.logMessage(message, receiveIp);
}
}
Is das mit dem WindowAdapter eigentlich so richtig, ich kriege immer eine NullpointerException(der receiver existiert doch?)
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.
Als Test ist Sender/Empfängeraddresse auf Localhost gesetzt. "Senden" und "Empfangen" kann ich wohl und auch die ganze Zeit.