G
Guest
Gast
hi Leute,
und zwar habe ich folgendes Problem...
wenn ich das Programm laufen lasse, stimmt die Consolenausgabe- so wie ich es mir vorstelle. nur leider schmeisst es dann eine IllegalMonitorStateExecption
die Consolenausgabe ist dann so:
wenn ich das wait() durch thread.sleep(1000) ersetze, ist zwar die Execption weg, bekomme aber die Ausgabe
Was mache ich falsch? Danke schonmal
und zwar habe ich folgendes Problem...
wenn ich das Programm laufen lasse, stimmt die Consolenausgabe- so wie ich es mir vorstelle. nur leider schmeisst es dann eine IllegalMonitorStateExecption
Code:
import java.io.*;
import java.util.*;
import javax.comm.*;
public class Verbindung implements SerialPortEventListener
{
Enumeration portListe;
CommPortIdentifier portId;
String befehl;
String ergebnis;
String ergebnis2 = "";
SerialPort seriellerPort;
OutputStream outputStream;
InputStream inputStream;
String standardPort = "/dev/ttyS0";
void verbindungHerstellen()
{
// Hier wird die Verbindung hergestellt
boolean portFound = false;
portListe = CommPortIdentifier.getPortIdentifiers();
while (portListe.hasMoreElements())
{
portId = (CommPortIdentifier) portListe.nextElement();
if (portId.getPortType() == CommPortIdentifier.PORT_SERIAL)
{
if (portId.getName().equals(standardPort))
{
System.out
.println("Port auf " + standardPort + " gefunden");
portFound = true;
try
{
seriellerPort = (SerialPort) portId.open("Verbindung",
2000);
} catch (PortInUseException e)
{
System.out
.println("Port wird von einem anderen Gerät benutzt");
continue;
}
try
{
outputStream = seriellerPort.getOutputStream();
} catch (IOException e)
{
e.printStackTrace();
}
try
{
seriellerPort.setSerialPortParams(9600,
SerialPort.DATABITS_7, SerialPort.STOPBITS_1,
SerialPort.PARITY_EVEN);
} catch (UnsupportedCommOperationException e)
{
} catch (Exception e)
{
System.out.println(e);
}
try
{
Thread.sleep(1000);
} catch (InterruptedException e)
{
}
try
{
inputStream = seriellerPort.getInputStream();
} catch (IOException e)
{
}
try
{
seriellerPort.addEventListener(this);
} catch (TooManyListenersException e)
{
}
seriellerPort.notifyOnDataAvailable(true);
}
}
}
}
void verbindungTrennen()
{
// Hier wird die Verbindung getrennt
try
{
wait();
} catch (InterruptedException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
seriellerPort.close();
}
public synchronized void serialEvent(SerialPortEvent event)
{
System.out.println("Aktivität empfangen");
switch (event.getEventType())
{
case SerialPortEvent.OUTPUT_BUFFER_EMPTY:
break;
case SerialPortEvent.DATA_AVAILABLE:
System.out.println("Daten verfügbar; probiere, sie abzuholen");
byte[] readBuffer = new byte[20];
try
{
while (inputStream.available() > 0)
{
int numBytes = inputStream.read(readBuffer);
}
ergebnis = new String(readBuffer).trim();
System.out.println(ergebnis);
} catch (IOException e)
{
}
break;
}
this.notify();
}
public String getErgebnis(String befehl)
{
this.befehl = befehl;
System.out.println("Probiere, den Befehl " + befehl + "zu senden");
try
{
outputStream.write(befehl.getBytes());
} catch (IOException e)
{
e.printStackTrace();
}
byte[] readBuffer = new byte[20];
try
{
while (inputStream.available() > 0)
{
int numBytes = inputStream.read(readBuffer);
}
System.out.print(new String(readBuffer));
} catch (IOException e)
{
}
return ergebnis;
}
}
Code:
Port auf /dev/ttyS0 gefunden
Probiere, den Befehl :IDNR?
zu senden
Aktivität empfangen
Daten verfügbar; probiere, sie abzuholen
BENDER GmbH+CoKG
wenn ich das wait() durch thread.sleep(1000) ersetze, ist zwar die Execption weg, bekomme aber die Ausgabe
Code:
Port auf /dev/ttyS0 gefunden
Probiere, den Befehl :IDNR?
zu senden
Aktivität empfangen
Daten verfügbar; probiere, sie abzuholen
BENDER G
Aktivität empfangen
Daten verfügbar; probiere, sie abzuholen
mbH+CoKG
Aktivität empfangen
Daten verfügbar; probiere, sie abzuholen
Was mache ich falsch? Danke schonmal