Hey Forum!
Folgender Code erstellt ein Socket und gibt solange die empfangenen Zeichen aus, bis "exit" empfangen wurde,
Erstellt wird der Socket, wenn ich auf einen Button klicke:
Das Thread-Objekt selbst erzeug ich außerhalb der Methode um in jeder Methode auf das Objekt zugreifen zu können:
Wenn sich der Thread nach einem "exit" beendet hat und ich versuche den Socket erneut zu starten, bekomme ich folgende Exception:
Was ist da falsch?
Danke und Tschau
Sandro
Folgender Code erstellt ein Socket und gibt solange die empfangenen Zeichen aus, bis "exit" empfangen wurde,
Code:
public class ThreadTest2 extends Thread {
ThreadTest2() {
}
public void run() {
ServerSocket meinServer = null;
Socket clientSocket = null;
String hallo = null;
while(! t2.isInterrupted()) {
try {
meinServer = new ServerSocket(5000);
clientSocket = meinServer.accept();
DataInputStream in = new DataInputStream(clientSocket.getInputStream());
BufferedReader d = new BufferedReader(new InputStreamReader(in));
hallo = d.readLine();
while(! hallo.matches("exit")) {
jTextArea1.append(hallo + "\n");
// System.out.println(t2.getState());
hallo = d.readLine();
}
d.close();
in.close();
meinServer.close();
try {
Thread.sleep(1000);
} catch (InterruptedException ex) {
t2.interrupt();
ex.printStackTrace();
}
t2.interrupt();
jButton1.setEnabled(true);
}
catch (IOException ex) {
ex.printStackTrace();
}
}
}
}
Erstellt wird der Socket, wenn ich auf einen Button klicke:
Code:
private void jButton1MouseClicked(java.awt.event.MouseEvent evt) {
socketErstellen();
}
private void socketErstellen() {
// System.out.println(t2.getState());
t2.start();
jButton1.setEnabled(false);
}
Das Thread-Objekt selbst erzeug ich außerhalb der Methode um in jeder Methode auf das Objekt zugreifen zu können:
Code:
public Thread t2 = new Thread( new ThreadTest2() );
Wenn sich der Thread nach einem "exit" beendet hat und ich versuche den Socket erneut zu starten, bekomme ich folgende Exception:
Code:
Exception in thread "AWT-EventQueue-0" java.lang.IllegalThreadStateException
at java.lang.Thread.start(Thread.java:571)
at kqml.d_verbinden.socketErstellen(d_verbinden.java:113)
at kqml.d_verbinden.jButton1MouseClicked(d_verbinden.java:106)
at kqml.d_verbinden.access$000(d_verbinden.java:21)
at kqml.d_verbinden$1.mouseClicked(d_verbinden.java:53)
at java.awt.AWTEventMulticaster.mouseClicked(AWTEventMulticaster.java:212)
at java.awt.Component.processMouseEvent(Component.java:5504)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3135)
at java.awt.Component.processEvent(Component.java:5266)
at java.awt.Container.processEvent(Container.java:1966)
at java.awt.Component.dispatchEventImpl(Component.java:3968)
at java.awt.Container.dispatchEventImpl(Container.java:2024)
at java.awt.Component.dispatchEvent(Component.java:3803)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4212)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:3901)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:3822)
at java.awt.Container.dispatchEventImpl(Container.java:2010)
at java.awt.Window.dispatchEventImpl(Window.java:1778)
at java.awt.Component.dispatchEvent(Component.java:3803)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:463)
at java.awt.EventDispatchThread.pumpOneEventForHierarchy(EventDispatchThread.java:242)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:163)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:157)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:149)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:110)
Was ist da falsch?
Danke und Tschau
Sandro