Ich lese eine Platte ein.
Das übliche Schleifengedöns.
Ich wollte dem Benutzer ProgressBar darstellen, also mußte ich mich mit Threads auseinandersetzen. Hab ich auch gemacht. Leider wurde der Bar erst am Ende der Funktions angezeigt und nicht zur Laufzeit.
Also habe ich einen ProgressIndicator eingefügt und das ganze mit Property probiert, the same.
Wenn ich System.out verwende sehe ich das Props und Thread zur Laufzeit aktualisiert werden bzw. parallel laufen.
Irgendwie bekomme ich javafx nicht dazu zur Laufzeit anzuzeigen wie der Status ist.
anliegend das Fensterlayout und der Code ich hoffe das ist nicht zu unübersichtlich:
Das übliche Schleifengedöns.
Ich wollte dem Benutzer ProgressBar darstellen, also mußte ich mich mit Threads auseinandersetzen. Hab ich auch gemacht. Leider wurde der Bar erst am Ende der Funktions angezeigt und nicht zur Laufzeit.
Also habe ich einen ProgressIndicator eingefügt und das ganze mit Property probiert, the same.
Wenn ich System.out verwende sehe ich das Props und Thread zur Laufzeit aktualisiert werden bzw. parallel laufen.
Irgendwie bekomme ich javafx nicht dazu zur Laufzeit anzuzeigen wie der Status ist.
anliegend das Fensterlayout und der Code ich hoffe das ist nicht zu unübersichtlich:
Code:
/*
* author JUPP
*/
package wotan;
import SYS_APPSBAS.FIIO;
import SYS_APPSBAS.IBOX;
import SYS_APPSBAS.Prop_Progress;
import SYS_APPSBAS.TRFR;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.FileOutputStream;
import java.io.FileWriter;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;
import java.util.ResourceBundle;
import javafx.beans.value.ChangeListener;
import javafx.beans.value.ObservableValue;
import javafx.concurrent.Task;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.control.Label;
import javafx.scene.control.ProgressBar;
import javafx.scene.control.ProgressIndicator;
import javafx.scene.control.TextField;
import javafx.scene.layout.VBox;
import javafx.stage.DirectoryChooser;
import javafx.stage.Stage;
/**
* FXML Controller class
*
* @author Jupp
*/
public class S1_1_PlatteController implements Initializable {
final Prop_Progress propProg = new Prop_Progress();
@FXML private TextField TF_LaufWerkBuchstabePlatte;
@FXML private TextField TF_NumPlatte;
@FXML private Label LB_STATUS;
@FXML private ProgressBar PB_STATUS;
@FXML private ProgressIndicator PI_STATUS;
// Variablen deklarieren und initalisieren
String userHome = System.getProperty("user.home");
String wotanHome = userHome + "\\WOTAN";
String dataFileName = "WOTANDATEN.CSV";
String wotanConfig = wotanHome + "\\config";
String configFileName = "WOTANCONFIG.CSV";
String oldString = "";
int anzRows = 1;
double aktStatProgIndi = 0.0;
// Initializes the controller class.
@Override
public void initialize(URL url, ResourceBundle rb) {
// TODO
// Propertie setzen
propProg.setNum(0);
propProg.prop().addListener(new ChangeListener<Object>() {
@Override
public void changed(ObservableValue<? extends Object> observable, Object oldValue, Object newValue) {
Integer statProg = new Integer(propProg.getNum()); // Propertie abfragen
aktStatProgIndi = (double) statProg / anzRows ; // Prozentsatz der Fertigstellung abfrage
PI_STATUS.setProgress(aktStatProgIndi);
}
});
// Prüfen Plattennummer
TF_NumPlatte.focusedProperty().addListener(new ChangeListener<Boolean>() {
@Override
public void changed(ObservableValue<? extends Boolean> arg0, Boolean oldPropertyValue, Boolean newPropertyValue) {
String FieldValue = TF_NumPlatte.getText();
if (newPropertyValue) { // Get Focus
oldString = FieldValue;
} else { // Lost Focus
TRFR trfr = new TRFR();
TF_NumPlatte.setText(trfr.vali_Len_Of_Str(FieldValue, 2));
trfr = null;
// Null checker
if ((FieldValue == null) || (FieldValue == "") || (FieldValue.isEmpty())) {
TF_NumPlatte.requestFocus();
}
}
}
});
}
public void handle_CB_Choose() {
final DirectoryChooser dirChooser = new DirectoryChooser();
final Stage stage = new Stage();
File file = dirChooser.showDialog(stage);
if (file != null) {
TF_LaufWerkBuchstabePlatte.setText(file.toString());
}
}
public void handle_CB_ArchivPlattenNrLöschen() throws FileNotFoundException, IOException {
TRFR trfr = new TRFR();
String strNumPlatte = TF_NumPlatte.getText();
if ( (!strNumPlatte.isEmpty()) || (trfr.get_Int_F_Str(strNumPlatte) != 0) ) {
FIIO fiio = new FIIO();
File original = new File(wotanHome + "\\" + dataFileName);
File kopie = new File(wotanHome + "\\COPY_" + dataFileName);
String strLine;
BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(original)));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(kopie)), (int) (long) original.length()); // unproblematisch wird immer auf 60 Mio beschränkt
// Nur Zeilen einlesen welche nicht mit der Plattennummer übereinstimmen
String[] tmpArray = new String[3];
while((strLine = br.readLine()) != null){
tmpArray = strLine.split(";");
if (!tmpArray[2].equals(strNumPlatte)) {
bw.write(strLine);
bw.newLine();
}
}
bw.close();
br.close();
fiio.DelFile(wotanHome, dataFileName);
fiio.RenameFile(wotanHome, "COPY_" + dataFileName, dataFileName);
fiio = null;
} else {
IBOX.message("ACHTUNG", "Plattennummer fehlt oder ist 0 !");
}
trfr = null;
}
public void handle_CB_Einlesen() throws FileNotFoundException, IOException {
LB_STATUS.setText("Lese Platte");
final Task<Void> pb = new Task<Void>() {
//@Override
public Void call() throws Exception {
for (int t = 1; t <= 10; t++) {
if (t == 10) {
t = 1;
}
updateProgress(t, 10);
Thread.sleep(1000);
}
return null;
}
};
PB_STATUS.progressProperty().unbind();
PB_STATUS.progressProperty().bind(pb.progressProperty());
new Thread(pb).start();
String strLW = TF_LaufWerkBuchstabePlatte.getText();
File fileLW = new File(strLW);
String strNumPlatte = TF_NumPlatte.getText();
if ((strLW != "") && (strNumPlatte != "")) {
// Instanzen erstellen
FIIO fiio = new FIIO();
// Variablen deklarieren und initalisieren
String strLine = "";
List<File> dataLst = new ArrayList<File>();
List<String> extensionLst = new ArrayList<String>();
Integer AnzExtensionEinträge = 0;
String[] lineArray = new String[3];
String strDirOrFile = "";
String strExtension = "";
String strMedia = "";
Integer whatInLst = 0;
File dataFile = new File(wotanHome + "\\" + dataFileName);
String[] tmpArray = new String[3];
String strFileName = "";
Integer lenFile = 0;
Integer lenExtension = 0;
long lngDatSize = 0;
// Verzeichnisse anlegen wenn sie noch nicht existieren
fiio.BuildFolder(wotanHome);
// Prüfen ob die Datendatei zu groß ist
if (fiio.CheckFileExist(wotanHome, dataFileName) == true) {
lngDatSize = dataFile.length();
} else {
fiio.BuildFile(wotanHome, dataFileName);
}
// Größe des Datenfiles prüfen
if (lngDatSize < 70000000) {
// Alte Einträge werden gelöscht
handle_CB_ArchivPlattenNrLöschen();
// Zu prüfende Extensions einlesen
extensionLst = fiio.ReadFileToList(wotanConfig, configFileName, true);
// Wenn Extensions in der Liste
if (extensionLst.isEmpty() == false) {
// FileBuffer deklarieren
FileWriter fw = new FileWriter(dataFile,true);
BufferedWriter bw = new BufferedWriter(fw);
// Extensionsliste abarbeiten
for (int i = 0; i < extensionLst.size(); i++) {
// Parameter aus Extensionlist auslesen
lineArray = extensionLst.get(i).split(";");
strExtension = lineArray[0];
strMedia = lineArray[1];
strDirOrFile = lineArray[2];
lenExtension = strExtension.length();
// Prüfen was in Liste stehen soll
if (strDirOrFile.equalsIgnoreCase("Datei")) {
whatInLst = 1;
} else {
whatInLst = 2;
}
// Einlesen der Daten in die Datendatei
dataLst = fiio.getFileDirList(fileLW, strExtension, whatInLst);
anzRows = dataLst.size();
// Anhängen der Einträge der Platte
for (int j = 0; j < dataLst.size(); j++) {
strFileName = dataLst.get(j).getName();
lenFile = strFileName.length();
propProg.setNum(j);
// ggf. die Dateiendung entfernen
if ( strFileName.substring(lenFile - lenExtension).equals(strExtension)) {
strFileName = strFileName.substring(0, lenFile - lenExtension);
}
bw.write(strMedia + ";" + strFileName + ";" + strNumPlatte + ";" + "\r\n");
}
}
bw.close();
} else {
IBOX.message("ACHTUNG !", "Extensions fehlen, bitte erst festlegen und speichern !");
}
} else {
IBOX.message("ACHTUNG !", "Maximum der Dateigröße erreicht, erst Platten löschen !");
}
fiio = null;
} else {
IBOX.message("ACHTUNG !", "Verzeichnis und Plattennummer müssen eingegeben werden, sonst läufs nicht !");
}
LB_STATUS.setText("Fertig");
pb.cancel();
}
}