# Current thread not owner



## User0 (30. Mai 2006)

Hallo! Ich schreibe gerade ein Programm, das über die Standard-Netzwerk-API von Java eine Verbindung zu einem POP3-Server aufbaut. Wenn ich es starte, wird der Catchblock aufgerufen und folgende Fehlermeldung angezeigt:
current thread not owner(per getMessage())
Wie kann ich dieses Problem lösen? Muss ich einen separaten Thread für die Verbindung anlegen? :bahnhof: 

Danke, User0


----------



## Murray (30. Mai 2006)

Um das beantwortezn zu können , bräuchte man etwas mehr Code; offenbar wird irgendwo Object#wait oder Object#notify außerhalb einer auf das entsprechende Object synchronisierten Codesequenz aufgerufen.


----------



## User0 (31. Mai 2006)

Oh, tut mir leid, das hab ich ganz vergessen!
Der ganze Code ist leider zu lang, um hier aufgeführt zu werden.
Hier die Deklarationen:  :roll: 

```
private JPanel jContentPane = null;
	private JLabel serverLabel = null;
	private JTextField serverField = null;
	private JLabel userLabel = null;
	private JTextField userField = null;
	private JLabel passLabel = null;
	private JTextField passField = null;
	private JLabel resultLabel = null;
	private JButton checkButton = null;
	private Socket s = null;
	private InputStream sin = null;
	private OutputStream sout = null;
	private JFrame errorFrame = null;  //  @jve:decl-index=0:visual-constraint="421,94"
	private JTextPane errorTextPane = null;
```
Der Logikteil:

```
private void waitForServer(InputStream is) throws Exception
	{
		while(true)
		{
			if(is.available() > 0) {break;}
			else {wait(10);}
		}
	}

private JButton getCheckButton() {
		if (checkButton == null) {
			checkButton = new JButton();
			checkButton.setText("Überprüfen");
			checkButton.addActionListener(new java.awt.event.ActionListener() {
				public void actionPerformed(java.awt.event.ActionEvent e)	
				{
					try
					{
						//POP3 Connect
						s = new Socket(serverField.getText(), 110);
						//Stream Connecting
						sin = s.getInputStream();
						sout = s.getOutputStream();
						//Sending messages: intializing
						String message = null;
						//Sending messages: Authentication
						message = "USER " + userField.getText();
						sout.write(message.getBytes());
						waitForServer(sin);
						message = "PASS " + passField.getText();
						sout.write(message.getBytes());
						waitForServer(sin);
						//Sending message: requesting stat
						message = "STAT";
						sout.write(message.getBytes());
						//Reading answer
						byte[] buffer = new byte[35];
						sin.read(buffer);
						resultLabel.setText(buffer.toString());
						//Quitting
						message = "QUIT";
						sout.write(message.getBytes());
					}
					catch(Exception exc) 
					{
						resultLabel.setText("Es ist ein Fehler aufgetreten.");
						getErrorFrame().setVisible(true);
						errorTextPane.setText(exc.getMessage());
					}
				}
			});
		}
		return checkButton;
	}
```

Den ganzen Code habe ich mit dem Visual Editor von Eclipse erstellt.

Danke nochmal


----------



## Mag1c (2. Jun 2006)

Moin,

das "wait(10)" ist schuld. Du wolltest sicher Thread.sleep(1000) benutzen.

Gruß
Mag1c


----------

