Hallo zusammen,
bin neu hier! Habe gute Kenntnisse in C, jedoch nur Grundlagen in OOP.
Java steige ich grade ein. Hatte zwar ein Semester an der Uni, aber das hat nit wirklich was gebracht
zu meinem Problem:
ich habe ein Device welches über USB->serial (COM4) mit dem PC kommuniziert.
über hyperterminal zb kommt bei einem 'h' die hilfe, eine reine textausgabe.
nun möchte ich hierzu eine GUI programmieren.
Die Grundlage dazu ist natürlich eine funktionierende Kommunikation im Hintergrund.
Dabei bin ich auf rxtx gestoßen!
das kalppt soweit auch ganz gut... zumindest der Anfang.
Ich bekomme den port geöffnet und kann einen String ("h\r") senden
ich bekomme auch was zurück, die Hilfe! jedoch kann ich diese momentan nur in einer primitiven schleife abfangen.
dies bedeutet, der rasselt immer weiter bis was in den inputstream gelangt und gibt das einfach immer stur weiter aus.
das ist ja nicht Sinn und Zweck der Sache!
habe also auch Beispiele mit Listenern gefunden, jedoch blicke ich die noch nicht wirklich! Dort werden Threads erstellt und ähnliches.
hier ein link zu einem testprogramm was einen EventListener verwendet
JAVA: Serial Port access with javax.comm or rxtx on Windows, Linux etc.
meine Frage wäre jetzt, wie kann ich bei mir erreichen, daß NUR bei einem NEUEN Datenstrom im inputStream eingelesen wird?
Das ganze soll zudem immer weiter laufen, da ich ja stetig Kommunikation mit dem Device habe, sprich neuer Befehl = neue Ausgabe.
Hoffe ich versteht was ich meine und versuche und könnt mir ein wenig helfen!
Vielen Dank schonmal!
ps: hier mein quellcode
wobei in der main eigentlich nix passiert, die spare ich mir hier mal
bin neu hier! Habe gute Kenntnisse in C, jedoch nur Grundlagen in OOP.
Java steige ich grade ein. Hatte zwar ein Semester an der Uni, aber das hat nit wirklich was gebracht
zu meinem Problem:
ich habe ein Device welches über USB->serial (COM4) mit dem PC kommuniziert.
über hyperterminal zb kommt bei einem 'h' die hilfe, eine reine textausgabe.
nun möchte ich hierzu eine GUI programmieren.
Die Grundlage dazu ist natürlich eine funktionierende Kommunikation im Hintergrund.
Dabei bin ich auf rxtx gestoßen!
das kalppt soweit auch ganz gut... zumindest der Anfang.
Ich bekomme den port geöffnet und kann einen String ("h\r") senden
ich bekomme auch was zurück, die Hilfe! jedoch kann ich diese momentan nur in einer primitiven schleife abfangen.
Code:
while(true){
try {
while(inputStream.available()>1){
inputStream.read(byteArray2);
}
} catch (IOException ex) {
Logger.getLogger(Connection.class.getName()).log(Level.SEVERE, null, ex);
}
test = new String(byteArray2);
System.out.println(test);
dies bedeutet, der rasselt immer weiter bis was in den inputstream gelangt und gibt das einfach immer stur weiter aus.
das ist ja nicht Sinn und Zweck der Sache!
habe also auch Beispiele mit Listenern gefunden, jedoch blicke ich die noch nicht wirklich! Dort werden Threads erstellt und ähnliches.
hier ein link zu einem testprogramm was einen EventListener verwendet
JAVA: Serial Port access with javax.comm or rxtx on Windows, Linux etc.
meine Frage wäre jetzt, wie kann ich bei mir erreichen, daß NUR bei einem NEUEN Datenstrom im inputStream eingelesen wird?
Das ganze soll zudem immer weiter laufen, da ich ja stetig Kommunikation mit dem Device habe, sprich neuer Befehl = neue Ausgabe.
Hoffe ich versteht was ich meine und versuche und könnt mir ein wenig helfen!
Vielen Dank schonmal!
ps: hier mein quellcode
wobei in der main eigentlich nix passiert, die spare ich mir hier mal
Code:
import gnu.io.CommPort;
import gnu.io.CommPortIdentifier;
import gnu.io.SerialPort;
import java.io.BufferedOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.logging.Level;
import java.util.logging.Logger;
public class Connection
{
SerialPort serialPort;
static InputStream inputStream;
static BufferedOutputStream outputStream;
byte[] byteArray;
public Connection()
{
}
void connect ( String portName ) throws Exception
{
CommPortIdentifier portIdentifier = CommPortIdentifier.getPortIdentifier(portName);
if ( portIdentifier.isCurrentlyOwned() )
{
System.out.println("Error: Port is currently in use");
}
else
{
CommPort commPort = portIdentifier.open("xs1541GUI",2000);
if ( commPort instanceof SerialPort )
{
serialPort = (SerialPort) commPort;
serialPort.setSerialPortParams(115200,SerialPort.DATABITS_8,SerialPort.STOPBITS_1,SerialPort.PARITY_NONE);
inputStream = serialPort.getInputStream();
outputStream = new BufferedOutputStream(serialPort.getOutputStream());
}
else
{
System.out.println("Error: Only serial ports are handled by this example.");
}
if(portIdentifier.getName().equals(portName))
{
System.out.println("Port gefunden");
}
}
}
public void send()
{
String test ="help\r";
// String test2 ="testmich";
byteArray=test.getBytes();
byte[] byteArray2 = new byte[500];
try {
outputStream.write(byteArray);
outputStream.flush();
} catch (IOException ex) {
Logger.getLogger(Connection.class.getName()).log(Level.SEVERE, null, ex);
}
try {
while (inputStream.available() < 1) {
//System.out.println("leer");
}
} catch (IOException ex) {
Logger.getLogger(Connection.class.getName()).log(Level.SEVERE, null, ex);
}
while(true){
try {
while(inputStream.available()>1){
inputStream.read(byteArray2);
}
} catch (IOException ex) {
Logger.getLogger(Connection.class.getName()).log(Level.SEVERE, null, ex);
}
test = new String(byteArray2);
//test2=test3;
//test2="test";
System.out.println(test);
}
}