Hallo Leute,
Ich habe ein Programm, welches die ID eines RFID-Chips über USB ausliest.
Mein USB-Gerät ist am COM7-Port angeschlossen.
Ich habe eine Main-Class (JFrame - "Fenster") und noch eine weitere Klasse zur Ansteuerung des Serialports.
Das Auslesen funktioniert soweit ganz gut. Die Chips werden gelesen und die Daten kommen auch an.
In der JFrame-Class hab ich bis jetzt noch nichts besonderes drin stehen, bis auf die Erzeugung des Objekts p1 (Port_Ansteuerung)
Problem:
Mein Programm soll nach dem empfangen dieser 11-stelligen ID automatisch die ID (zum Test ob es funktioniert) in der TextArea (ta1) ausgeben.
Mein String RFID soll die ID beinhalten. Dieser String soll dann ausgegeben werden.
Ich denke es ist ein simpler Fehler aber ich komm einfach nicht darauf.
Ich hab mir schon überlegt, dass das JFrame vielleicht nicht die Main-class sein sollte sondern eine neue Klasse erstellt werden sollte. Dann eine Beziehung zwischen Klasse "Port_Ansteuerung" und "Fenster" herstellen.
Könnte es so funktionieren?
bzw.: Habt ihr andere Vorschläge?
Gruß nderim
P.S.: Quellcode
JFrame-Klasse "Fenster"
Klasse Port_Ansteuerung
Die getRFID()-Methode hab ich testweise eingbaut
Ich habe ein Programm, welches die ID eines RFID-Chips über USB ausliest.
Mein USB-Gerät ist am COM7-Port angeschlossen.
Ich habe eine Main-Class (JFrame - "Fenster") und noch eine weitere Klasse zur Ansteuerung des Serialports.
Das Auslesen funktioniert soweit ganz gut. Die Chips werden gelesen und die Daten kommen auch an.
In der JFrame-Class hab ich bis jetzt noch nichts besonderes drin stehen, bis auf die Erzeugung des Objekts p1 (Port_Ansteuerung)
Problem:
Mein Programm soll nach dem empfangen dieser 11-stelligen ID automatisch die ID (zum Test ob es funktioniert) in der TextArea (ta1) ausgeben.
Mein String RFID soll die ID beinhalten. Dieser String soll dann ausgegeben werden.
Ich denke es ist ein simpler Fehler aber ich komm einfach nicht darauf.
Ich hab mir schon überlegt, dass das JFrame vielleicht nicht die Main-class sein sollte sondern eine neue Klasse erstellt werden sollte. Dann eine Beziehung zwischen Klasse "Port_Ansteuerung" und "Fenster" herstellen.
Könnte es so funktionieren?
bzw.: Habt ihr andere Vorschläge?
Gruß nderim
P.S.: Quellcode
JFrame-Klasse "Fenster"
Java:
public class Fenster extends javax.swing.JFrame {
Port_Ansteuerung p1 = new Port_Ansteuerung("COM7");
public Fenster() {
initComponents();
}
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">
private void initComponents() {
lb1 = new javax.swing.JLabel();
jScrollPane1 = new javax.swing.JScrollPane();
ta1 = new javax.swing.JTextArea();
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
lb1.setText("Testfenster");
ta1.setColumns(20);
ta1.setRows(5);
jScrollPane1.setViewportView(ta1);
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addGap(26, 26, 26)
.addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 372, javax.swing.GroupLayout.PREFERRED_SIZE))
.addGroup(layout.createSequentialGroup()
.addGap(231, 231, 231)
.addComponent(lb1)))
.addContainerGap(76, Short.MAX_VALUE))
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addGap(19, 19, 19)
.addComponent(lb1)
.addGap(85, 85, 85)
.addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 236, javax.swing.GroupLayout.PREFERRED_SIZE)
.addContainerGap(124, Short.MAX_VALUE))
);
pack();
}// </editor-fold>
public static void main(String args[]) {
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new Fenster().setVisible(true);
}
});
}
// Variables declaration - do not modify
private javax.swing.JScrollPane jScrollPane1;
private javax.swing.JLabel lb1;
private javax.swing.JTextArea ta1;
// End of variables declaration
}
Klasse Port_Ansteuerung
Java:
import gnu.io.*;
import java.io.IOException;
import java.io.InputStream;
import java.util.Enumeration;
import java.util.TooManyListenersException;
public class Port_Ansteuerung {
CommPortIdentifier serialPortId;
Enumeration enumComm;
SerialPort serialPort;
InputStream inputStream;
Boolean serialPortGeoeffnet = false;
int baudrate = 9600;
int dataBits = SerialPort.DATABITS_8;
int stopBits = SerialPort.STOPBITS_1;
int parity = SerialPort.PARITY_NONE;
String RFID = "";
public Port_Ansteuerung(String port)
{
oeffneSerialPort(port);
System.out.println("Serial-Port wurde geöffnet");
}
boolean oeffneSerialPort(String portName)
{
Boolean foundPort = false;
if (serialPortGeoeffnet != false) {
System.out.println("Serialport bereits geöffnet");
return false;
}
System.out.println("Öffne Serialport");
enumComm = CommPortIdentifier.getPortIdentifiers();
while(enumComm.hasMoreElements()) {
serialPortId = (CommPortIdentifier) enumComm.nextElement();
if (portName.contentEquals(serialPortId.getName())) {
foundPort = true;
break;
}
}
if (foundPort != true) {
System.out.println("Serialport nicht gefunden: " + portName);
return false;
}
try {
serialPort = (SerialPort) serialPortId.open("Öffnen und Senden", 500);
} catch (PortInUseException e) {
System.out.println("Port belegt");
}
try {
inputStream = serialPort.getInputStream();
} catch (IOException e) {
System.out.println("Keinen Zugriff auf InputStream");
}
try {
serialPort.addEventListener(new serialPortEventListener());
} catch (TooManyListenersException e) {
System.out.println("TooManyListenersException für Serialport");
}
serialPort.notifyOnDataAvailable(true);
try {
serialPort.setSerialPortParams(baudrate, dataBits, stopBits, parity);
} catch(UnsupportedCommOperationException e) {
System.out.println("Konnte Schnittstellen-Paramter nicht setzen");
}
serialPortGeoeffnet = true;
return true;
}
void schliesseSerialPort()
{
if ( serialPortGeoeffnet == true) {
System.out.println("Schließe Serialport");
serialPort.close();
serialPortGeoeffnet = false;
} else {
System.out.println("Serialport bereits geschlossen");
}
}
void serialPortDatenVerfuegbar() {
try {
byte[] data = new byte[150];
int num;
while(inputStream.read() > -1) {
num = inputStream.read(data, 0, data.length);
System.out.println("Empfange: "+ new String(data, 0, num));
RFID = RFID + new String(data, 0, num);
}
} catch (IOException e) {
System.out.println("Fehler beim Lesen empfangener Daten");
}
}
public String getRFID(){
return RFID;
}
class serialPortEventListener implements SerialPortEventListener {
public void serialEvent(SerialPortEvent event) {
System.out.println("serialPortEventlistener");
if (SerialPortEvent.DATA_AVAILABLE > 0);{
serialPortDatenVerfuegbar();
}
}
}
}
Die getRFID()-Methode hab ich testweise eingbaut
Zuletzt bearbeitet: