Hallo an alle Java Könner und Kenner, habe ein Riesenproblem und benötige dringend HILFE !!!!
Ich habe eine Waage am COM Port, einen BarcodeScanner an der PS2 Tastaturschnittstelle und möchte fast gleichzeitig die Daten auswerten. Das Gewicht und der EAN Code sollen in einer Datenbank abgelegt werden.
So weit bin ich schon:
Das Auslesen des Gewichts in eine Variable klappt wunderbar und das einlesen des EAN Codes in ein JTextfield ebenfalls.
Mein Problem ist: ich möchte die Waage mit einem Thread im Hintergrund permanent überwachen und dann sobald sich das Gewicht eingependelt, den Thread aufwecken, der den Ean Code vom Barcode Scanner bekommt.
Der Thread Waage soll dann so lange warten, bis der Scanner den Ean Code aus dem textfeld gelesen hat und die Werte in einer Datenbank abgelegt hat.
Ich habe zwar Ansatzweise eine Lösung entwickelt s.u. , bei dieser treten aber folgende Probleme auf:
1. Der Thread, der für den Scanner zuständig führ ständig den requestFocus(); aus, was mir Probleme mit der JComBox bereitet.
2. Das Jtextfield liest manchmal nur den halben Ean Code ein, was mein größtes Problem ist.
Hier Meine Source Schnippsel !!!
Ich brauche DRINGEND HILFE !!!
Vielen Dank schon mal
H E L P !!!!! 
Ich habe eine Waage am COM Port, einen BarcodeScanner an der PS2 Tastaturschnittstelle und möchte fast gleichzeitig die Daten auswerten. Das Gewicht und der EAN Code sollen in einer Datenbank abgelegt werden.
So weit bin ich schon:
Das Auslesen des Gewichts in eine Variable klappt wunderbar und das einlesen des EAN Codes in ein JTextfield ebenfalls.
Mein Problem ist: ich möchte die Waage mit einem Thread im Hintergrund permanent überwachen und dann sobald sich das Gewicht eingependelt, den Thread aufwecken, der den Ean Code vom Barcode Scanner bekommt.
Der Thread Waage soll dann so lange warten, bis der Scanner den Ean Code aus dem textfeld gelesen hat und die Werte in einer Datenbank abgelegt hat.
Ich habe zwar Ansatzweise eine Lösung entwickelt s.u. , bei dieser treten aber folgende Probleme auf:
1. Der Thread, der für den Scanner zuständig führ ständig den requestFocus(); aus, was mir Probleme mit der JComBox bereitet.
2. Das Jtextfield liest manchmal nur den halben Ean Code ein, was mein größtes Problem ist.
Hier Meine Source Schnippsel !!!
Ich brauche DRINGEND HILFE !!!
Vielen Dank schon mal
Code:
public class Hauptbildsch extends JFrame implements ActionListener{
JPanel contentPane;
JPanel hauptb_p = new JPanel();
JTextField scan = new JTextField();
MyThreadCommunicator c = new MyThreadCommunicator();
MyThreadGew t1 = new MyThreadGew(c);
MyThreadScan sc = new MyThreadScan(scan,c);
public void leseWaage(){
t1.start();
sc.strat();
}
//-----------Source Schnippsel
/*Diese Klasse ist für die Synchronisation der beiden Threads zuständig.*/
public class MyThreadCommunicator {
private int differenz;
private boolean fertig = false;
boolean status;
int i=0;
int j=0;
public void getStatus(boolean fertigh){
fertig=fertigh;
}
public synchronized int get(){
while (fertig==false){
try{
wait();
}
catch(InterruptedException ex){}
System.out.println("GetStatusOf "+Thread.currentThread().getName()+" IST "+Thread.holdsLock(this));
}
System.out.println("Folgendes Gewicht übergeben "+ differenz);
fertig = false;
notify();
return differenz;
}
public synchronized void put(int value){
while(fertig == true){
try{
wait();
}
catch(InterruptedException ex){}
System.out.println("GetStatusOf "+Thread.currentThread().getName()+" IST "+Thread.holdsLock(this));
}
differenz = value;
//status = true;
fertig = true;
notify();
}
}
-----------------------------------------------------------------------
/* Dieser Thread überwacht permanent die Waage und sobald er 5 Mal das
selbe Gewicht gelesen wird, heisst es für Ihn er hta den Konstanten Wert und gibt diesen
an die Methode communicate.put();*/
public class MyThreadGew extends Thread {
MyThreadCommunicator communicate;
Waage wiege = new Waage();
private int neuesGewicht=0;
private int altesGewicht=0;
int differenz=0;
private int zwgew1=0;
private int zwgew2=0;
private int zwgew3=0;
private int zwgew4=0;
private int zwgew5=0;
public MyThreadGew(MyThreadCommunicator communic){
super("!!!!Waage!!!!");
this.communicate = communic;
}
public void run() {
while (!Thread.interrupted()) {
System.out.println("WAAGE GESPERRT : "+Thread.holdsLock(communicate));
zwgew1 = zwgew2;
zwgew2 = zwgew3;
zwgew3 = zwgew4;
zwgew4 = zwgew5;
zwgew5 = wiege.hoereWaage();
if (zwgew1 == zwgew2 && zwgew2 == zwgew3 && zwgew3 == zwgew4 && zwgew4 == zwgew5) {
neuesGewicht = zwgew5;
if (altesGewicht != neuesGewicht) {
differenz = neuesGewicht - altesGewicht;
altesGewicht = neuesGewicht;
communicate.put(differenz);
}
}
try {
Thread.sleep(550);
}
catch (InterruptedException ex) {interrupt();}
}
}
}
-------------------------------------------------------------
/*Hier wird mein Scanner überwacht, sobald er das Gewicht bekommt wird dieses weiterverarbeitet */
public class MyThreadScan extends Thread{
DBcontakt dbcon = new DBcontakt();
MyThreadCommunicator communicate;
private JTextField scan = new JTextField("");
private String altEan="";
public MyThreadScan(JTextField sc,MyThreadCommunicator communic){ //
super("Scanner");
this.scan = sc;
this.communicate= communic;
}
public void run() {
int differenz=0;
while (!Thread.interrupted()) {
differenz = communicate.get();
communicate.getStatus(true);
System.out.println("Folgendes wurde übenommen "+differenz);
String EanCode = new String(this.scan.getText());
if (!EanCode.equals(altEan)) {
altEan=EanCode;
if (differenz < 0) {
dbcon.updateProdukt(0, false,
Integer.parseInt(EanCode.substring(0, 3)));
}
else {
try {
ResultSet istDrin = dbcon.sucheInProdukten(Integer.parseInt(EanCode.substring(0, 3)));
if (istDrin.next()) {
if (istDrin.getInt(0) > 0)
dbcon.updateProdukt(differenz, true,Integer.parseInt(EanCode.substring(0, 3)));
}
else {
dbcon.addProdukt(Integer.parseInt(EanCode.substring(0, 3))
,differenz, EanCode, true, 1);
}
}
catch (SQLException ex1) {}
catch (NumberFormatException ex1) {}
}
}
// }
this.scan.selectAll();
this.scan.requestFocus();
// }
try {
Thread.sleep(2000);
}
catch (InterruptedException ex) {}
}
}
}