Hallo zusammen,
da ich an einem Projekt zum Einlesen von Fahrzeugscheinen arbeite (Stichwort "OCR")
habe ich folgende Klassen in einem Projekt, achtet auf die Kommentare.
Das ist KEIN fertiger Code, ich habe Unnötiges herausgelöscht, damit ihr nicht so viel lesen müsst.
und
waitingScreen.java ist nur ein JFrame mit einem nicht endenden Fortschrittsbalken.
Nun endlich zu meinem Problem:
Nach dem ich die Methode "doOCR()" der Klasse "TestApp" aufgerufen habe, wird zuerst der ganze OCR-Vorgang ausgeführt, und nach einigen Minuten (also wenn dieser Vorgang beendet ist) öffnet sich die Fortschrittsanzeige.
Wieso ist das so?
Sind diese Vorgänge nebenläufig, und der OCR-Vorgang hat eine höhere Priorität als das Anzeigen des waitingScreens?
Folgendes habe ich auch schon versucht, SuFu sei dank:
Erzeugen des waitingScreens erfolgt über eine Statische Methode, welche einen boolean liefert, wenn sie erfolgreich beendet wurde.
Der OCR-Vorgang wird erst gestartet, wenn die o.g. Methode "true" liefert.
Also in etwa
da ich an einem Projekt zum Einlesen von Fahrzeugscheinen arbeite (Stichwort "OCR")
habe ich folgende Klassen in einem Projekt, achtet auf die Kommentare.
Das ist KEIN fertiger Code, ich habe Unnötiges herausgelöscht, damit ihr nicht so viel lesen müsst.
Java:
public class TestApp( ) {
public String[] doOCR() {
waitingScreen waitingScreen; //Deklaration
waitingScreen = new waitingScreen(); //Initialisierung
for (int i = 0; i < Settings.FIELDS; i++) { //in Settings.java liegen nur Konstanten
inputFile = Settings.CROPPEDPATH + Settings.CROPPEDFILE + i + "."
+ Settings.CROPPEDFORMAT; //erzeugt einen Pfad zur Eingabe-Datei
outputFile = Settings.TEMPPATH + Settings.TEMPNAME + i + ".xml"; //Erzeugt einen Pfad zur Ausgabe-Datei
args = new String[] { inputFile, outputFile }; //beide Pfade in einen String packen
argList = new Vector<String>(Arrays.asList(args)); //In Vector konvertieren (gibt die OCR-API so vor
try {
performTextFieldRecognition(argList); //Eingabe-Datei(ein Bild) wird per OCR eingelesen und in die XML (Ausgabedatei) geschrieben
} catch (Exception e) {
}
results[i] = XMLreader.read(outputFile, "value"); //Wert dieser Datei wird im Array results gespeichert
}
return results; //gibt das Array zurück
}
}
und
waitingScreen.java ist nur ein JFrame mit einem nicht endenden Fortschrittsbalken.
Java:
public class waitingScreen extends JFrame{
JProgressBar progressBar;
final Dimension dim;
public waitingScreen() {
this.setTitle("Verarbeite...");
this.setSize(400, 80);
JFrame.setDefaultLookAndFeelDecorated(false);
this.setUndecorated(true);
this.setAlwaysOnTop(true);
dim = Toolkit.getDefaultToolkit().getScreenSize();
this.setLocation((int) ((dim.getWidth() - this.getWidth()) / 2),(int) ((dim.getHeight() - this.getHeight()) / 2));
this.setResizable(false);;
this.setLayout(null);
this.setDefaultCloseOperation(DO_NOTHING_ON_CLOSE);
this.setVisible(true);
progressBar = new JProgressBar();
progressBar.setSize(this.getWidth(), this.getHeight());
progressBar.setIndeterminate(true);
this.add(progressBar);
}
}
Nun endlich zu meinem Problem:
Nach dem ich die Methode "doOCR()" der Klasse "TestApp" aufgerufen habe, wird zuerst der ganze OCR-Vorgang ausgeführt, und nach einigen Minuten (also wenn dieser Vorgang beendet ist) öffnet sich die Fortschrittsanzeige.
Wieso ist das so?
Sind diese Vorgänge nebenläufig, und der OCR-Vorgang hat eine höhere Priorität als das Anzeigen des waitingScreens?
Folgendes habe ich auch schon versucht, SuFu sei dank:
Erzeugen des waitingScreens erfolgt über eine Statische Methode, welche einen boolean liefert, wenn sie erfolgreich beendet wurde.
Der OCR-Vorgang wird erst gestartet, wenn die o.g. Methode "true" liefert.
Also in etwa
Java:
while(!waitingScreen.isReady) {
//tut nichts
}
OCR-Vorgang
Zuletzt bearbeitet: