Ich habe zwei Buttons in meiner GUI einmal den Start Button ( der den Server Socket öffnet und per Thread start() am Port wartet auf einen Eingangs Stream) und den Stop Button der den Server Socket schließen soll, der geöffnet wurde. Hier nun der Ablauf :
1. Programm wird gestartet, GUI / Fenster öffnet sich
2. dürcke auf Start Button, Server Socket wird geöffnet und Methode listenPortOnce() wird gestartet
3. Son nun möchte ich den Server Socket mit dem Stop Button schließen, hier kommt noch kein Fehler und der Server Socket scheint geschlossen zu sein
4. Will ich nun aber den Server Socket wieder starten und drücke auf den Start Button, bekomme ich folgenden Fehler:
Exception in thread "AWT-EventQueue-0" java.lang.IllegalThreadStateException
at java.lang.Thread.start(Unknown Source)
at de.window.MyWindow.actionPerformed(MyWindow.java:41)
at java.awt.Button.processActionEvent(Unknown Source)
at java.awt.Button.processEvent(Unknown Source)
at java.awt.Component.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
at java.awt.EventQueue.access$200(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue$4.run(Unknown Source)
at java.awt.EventQueue$4.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)
und der Server Socket wird nicht wieder gestartet! .. Folgend nun der Code:
Die Action Events der Buttons
über die Methode rH.start() wird die methode rH.run() aufgerufen und in dieser wird listenPortonce() der selben Klasse aufgerufen
Klassen Kopf
Methode listenPortOnce()
zu guter letzt die Methode die über den Stop Button aufgerufen wird closeReceivePort()
Ich möchte einfach nur wissen wie ich beliebig oft den Server Starten und Stopen kann und dies nicht nur einmal pro Lebensdauer eines Fensters.
zur weiteren Erklärung, die Methode rH.startReceivePort(port); startet den Server Socket
und die Methode readContent() liest den Inptutstream in eine String.
Hoffentlich versteht man mein Problem, ich bin noch neu in der Java Programmierung, also seid bitte gütig zu mir!
1. Programm wird gestartet, GUI / Fenster öffnet sich
2. dürcke auf Start Button, Server Socket wird geöffnet und Methode listenPortOnce() wird gestartet
3. Son nun möchte ich den Server Socket mit dem Stop Button schließen, hier kommt noch kein Fehler und der Server Socket scheint geschlossen zu sein
4. Will ich nun aber den Server Socket wieder starten und drücke auf den Start Button, bekomme ich folgenden Fehler:
Exception in thread "AWT-EventQueue-0" java.lang.IllegalThreadStateException
at java.lang.Thread.start(Unknown Source)
at de.window.MyWindow.actionPerformed(MyWindow.java:41)
at java.awt.Button.processActionEvent(Unknown Source)
at java.awt.Button.processEvent(Unknown Source)
at java.awt.Component.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
at java.awt.EventQueue.access$200(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue$4.run(Unknown Source)
at java.awt.EventQueue$4.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)
und der Server Socket wird nicht wieder gestartet! .. Folgend nun der Code:
Die Action Events der Buttons
Java:
@Override
public void actionPerformed(ActionEvent e) {
/*///////////////////////////////////////////////////////////////
* Button Start
*//////////////////////////////////////////////////////////////
if(e.getActionCommand().equals("start")){
int port = Integer.parseInt(portNumber.getText());
rH.startReceivePort(port);
konsole.setText(konsole.getText() + "Server gestartet.." + "\n");
rH.start();
konsole.setText(konsole.getText() + "Server Port "+ port + " gestartet.." + "\n");
}
/*///////////////////////////////////////////////////////////////
* Button Stop
*//////////////////////////////////////////////////////////////
if(e.getActionCommand().equals("stop")){
rH.closeReceivePort();
konsole.setText(konsole.getText() + "Server gestopt.." + "\n");
}
}
über die Methode rH.start() wird die methode rH.run() aufgerufen und in dieser wird listenPortonce() der selben Klasse aufgerufen
Klassen Kopf
Java:
public class receiverHost extends Thread{
Methode listenPortOnce()
Java:
public boolean listenPortOnce(){
while (true ) {
try {
this.contentPaket = this.server.accept();
if(this.MSG == 1) System.out.println("Listen on Port..." + this.receivePort);
if(this.MSG == 1) System.out.println(readContent());
return true;
} catch (IOException e) {
//if(this.ERR == 1)System.err.println("IOEx1...");
//if(ERR == 1)e.printStackTrace();
return false;
}
}
}
zu guter letzt die Methode die über den Stop Button aufgerufen wird closeReceivePort()
Java:
public void closeReceivePort(){
if (this.server != null){
try {
this.server.close();
if(this.ERR == 1)System.out.println("Close Receive Port... " + this.receivePort);
} catch (IOException e) {
if(this.ERR == 1)System.err.println("Port nicht zu schliessen...");
if(this.ERR == 1)e.printStackTrace();
}
}else{
if(this.ERR == 1)System.err.println("Kein Port wurde geöffnet...");
}
}
Ich möchte einfach nur wissen wie ich beliebig oft den Server Starten und Stopen kann und dies nicht nur einmal pro Lebensdauer eines Fensters.
zur weiteren Erklärung, die Methode rH.startReceivePort(port); startet den Server Socket
und die Methode readContent() liest den Inptutstream in eine String.
Hoffentlich versteht man mein Problem, ich bin noch neu in der Java Programmierung, also seid bitte gütig zu mir!
Zuletzt bearbeitet: