# Problem mit multi threading



## Tic Rederon[Gast] (4. Mai 2006)

das is mein Server, der eben für jede neue Anfrage MyClient erzeugt


```
public class StoneServer extends Thread{
	 private static ServerSocket server;
	 private static final int port = 120;
	 
	 private static void loginAbfangen()
	 {
		 for(;;)
		 {
			 try
			 {
				 
				 new MyClient(server.accept());
				 System.out.println("Neuer Client;
				 
			 }
			 catch ( IOException e ) {
				 System.out.println("Verbindung weg 1");
			 }
		 }
	 }
	public void run() {
		try {
			 server = new ServerSocket(port);
			 System.out.println("Server Gestartet");
			 System.out.println("IP: "+ server.getLocalSocketAddress());
			 System.out.println("Port: "+ port);
			 loginAbfangen();	
		 } catch (IOException e) {
			 System.out.println("Bereits ein Server auf dem Port(" + port + ") aktiv.");
		 }		 
	}
	
	 
}
```

nun will ich ein GUI dazu bauen das einen server eben einfach startet
start = ein button der mit dem actionlister besetzt wird

und es wird ein Objekt von StoneServer ein objekt erzeugt das dann unten eben "gerunnt" wird.
aber durch die 
	
	
	
	





```
new MyClient(server.accept());
```
 funktion wird die GUI still gelegt und nur noch der server läuft aber der rest nicht, versteh aber nicht warum, weil er eben ein Thread is und doch nur nebenbau laufen sollte.


```
start.addActionListener(new ActionListener(){
			public void actionPerformed(ActionEvent e) {
				start.setVisible(false);
				close.setVisible(true);
				frame.repaint();
				server.run();
				System.out.println("ok");	
			}
		});
```


----------



## Illuvatar (4. Mai 2006)

Ein Thread wir mit start() und nicht mit run() gestartet. Wenn du server.run(); schreibst ist das ein ganz normaler Methodenaufruf.


----------



## Tic Rederon (8. Mai 2006)

auch wenn ichs mit server.start mach, passiert genau das selbe


----------



## foobar (9. Mai 2006)

Ist MyClient denn auch ein Thread? 

Noch ein paar Tips:
- Statische Mthoden und Member sollten nur im Ausnahmefall verwendet werden.
- das frame.repaint() ist obsolet, wenn dein Code sauber ist.
- Ein Sysout in einem Catchblock ist keine sinvolle Fehlerbehandlung. Gib zumindest den Stacktrace aus oder besser verpacke die Exception in eine anwendungsspezifische Exception und werfe diese weiter.
- deutsche Bezeichner im Code nerven.


----------

