Hi Leute!
Da bin ich wieder und bring wieder ein Problem mit
Folgendes:
Ich habe eine Shell, darin sind 6 Label. 3 davon dienen nur als Bezeichner, die 3 anderen repräsentieren Werte.
Die ersten beiden Labels davon ändern sich einmal bzw. zweimal.
Das 3. Label allerdings ist der besagte Counter.
Das ganze sieht wie folgt aus: Der Counter soll hochzählen, wieviele SQL Anweisungen erfolgreich durchgeführt worden sind. Die Ausführung der SQL Anweisungen läuft bereits als Thread und in diesem gibt es eine Variable, welche immer um eins hochgezählt wird.. Soweit so gut...
Nun habe ich aber das Phänomen, dass der Counter mal problemlos durchläuft, meistens aber mitten drin, so vor den ersten tausend Anweisungen, sich "aufhängt", das Programm selbst aber weiterläuft. Erst nachdem die Anweisungen alle abgearbeitet sind (es sind ca. 26000 Stück), dann aktualisiert er den Counter auf den Endstand und das Programm reagiert wieder. In seltenen Fällen beginnt der Counter auch garnicht erst zu zählen ^^
Das ganze habe ich n bisschen blöde umgesetzt, hab bisher allerdings noch nicht über eine andere Möglichkeit nachgedacht. Wenn der Thread selbst das Label ändern soll, gibts allerdings eine Exception.
Anbei mal der Code:
Hiermit wird der Thread gestartet..
Diese Klasse repräsentiert den Thread..
Und diese Methode führt die SQL Anweisungen durch.. Der Counter ist als Instanzvariable deklariert und public, damit die Shell drauf zugreifen kann..
Ich hoffe, ihr könnt mir vll. ne bessere Lösung zeigen bzw. mir n Tipp geben und mir sagen, warum der Thread sich so komisch verhält.
Liebe Grüße,
Flo
Da bin ich wieder und bring wieder ein Problem mit

Folgendes:
Ich habe eine Shell, darin sind 6 Label. 3 davon dienen nur als Bezeichner, die 3 anderen repräsentieren Werte.
Die ersten beiden Labels davon ändern sich einmal bzw. zweimal.
Das 3. Label allerdings ist der besagte Counter.
Das ganze sieht wie folgt aus: Der Counter soll hochzählen, wieviele SQL Anweisungen erfolgreich durchgeführt worden sind. Die Ausführung der SQL Anweisungen läuft bereits als Thread und in diesem gibt es eine Variable, welche immer um eins hochgezählt wird.. Soweit so gut...
Nun habe ich aber das Phänomen, dass der Counter mal problemlos durchläuft, meistens aber mitten drin, so vor den ersten tausend Anweisungen, sich "aufhängt", das Programm selbst aber weiterläuft. Erst nachdem die Anweisungen alle abgearbeitet sind (es sind ca. 26000 Stück), dann aktualisiert er den Counter auf den Endstand und das Programm reagiert wieder. In seltenen Fällen beginnt der Counter auch garnicht erst zu zählen ^^
Das ganze habe ich n bisschen blöde umgesetzt, hab bisher allerdings noch nicht über eine andere Möglichkeit nachgedacht. Wenn der Thread selbst das Label ändern soll, gibts allerdings eine Exception.
Anbei mal der Code:
Hiermit wird der Thread gestartet..
Java:
private void startCopy() {
String[] connection = parentGUI.getConnection().split(";");
bOK.setEnabled(false);
lStatusValue.setText("working...");
HKStart hk = new HKStart(this, connection);
while (!hk.finished) {
try {
Thread.sleep(500);
setCopied(refresh.eintraege);
} catch (InterruptedException ie) { }
}
bOK.setEnabled(true);
lStatusValue.setText("finished");
}
Diese Klasse repräsentiert den Thread..
Java:
public class HKStart implements Runnable {
private CreateHK ivGUI;
private OPTerminTool conn;
private Thread runner;
public boolean finished = false;
public HKStart(CreateHK inGUI, String[] connection) {
ivGUI = inGUI;
if (runner == null) {
conn = new OPTerminTool(connection[0].split(":")[0], Integer.parseInt(connection[0].split(":")[1]), connection[1], connection[2], connection[3]);
ivGUI.setEntries(conn.hauskatalogRows());
runner = new Thread(this);
runner.start();
}
}
public void run() {
conn.hauskatalog(ivGUI);
finished = true;
}
}
Und diese Methode führt die SQL Anweisungen durch.. Der Counter ist als Instanzvariable deklariert und public, damit die Shell drauf zugreifen kann..
Java:
public boolean hauskatalog(CreateHK inGUI) {
finished = false;
boolean retVal = false;
Random zufall = new Random(System.currentTimeMillis());
String sql;
inGUI.refresh = this;
if (checkConnection()) {
sql = "Insert into hauskatalog (HAK_OPA_ID, HAK_DAUER_SN_1, HAK_DAUER_SN_2, HAK_DAUER_SN_3, HAK_SAALENTSORGUNG, HAK_RUESTZEIT, HAK_NARKOSEZEIT, HAK_REINIGUNG, HAK_OPA_OPS, HAK_OPA_BEZEICHNUNG, HAK_OPA_BESCHREIBUNG, HAK_SCHLAGWORT, HAK_HYGIENE, HAK_IUSER, HAK_UUSER, HAK_UDATE) values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";
dbConn.createPreparedStatement(sql);
try {
while (ivResult.next()) {
if (!(dbConn.checkIfExists("Select HAK_ID from hauskatalog where HAK_OPA_ID = '" + ivResult.getString(1) + "'"))) {
dbConn.setStatement(1, ivResult.getString(1)); // OPA ID
dbConn.setStatement(2, "" + zufall.randomInt(20, 69)); // SN1
dbConn.setStatement(3, "" + zufall.randomInt(70, 119)); // SN2
dbConn.setStatement(4, "" + zufall.randomInt(120, 169)); // SN3
dbConn.setStatement(5, ivResult.getString(2)); // SAALENTSORGUNG
dbConn.setStatement(6, "" + zufall.randomInt(5, 15)); // RÜSTZEIT
dbConn.setStatement(7, "" + zufall.randomInt(10, 20)); // NARKOSEZEIT
dbConn.setStatement(8, ivResult.getString(3)); // REINIGUNG
dbConn.setStatement(9, ivResult.getString(4)); // OPA_OPS
dbConn.setStatement(10, ivResult.getString(5)); // OPA_BEZEICHNUNG
dbConn.setStatement(11, ivResult.getString(6)); // OPA_BESCHREIBUNG
dbConn.setStatement(12, ivResult.getString(7)); // SCHLAGWORT
dbConn.setStatement(13, ivResult.getString(8)); // HYGIENE
dbConn.setStatement(14, "8"); // IUSER
dbConn.setStatement(15, "8"); // UUSER
dbConn.setStatement(16, "0000-00-00 00:00:00"); // UPDATE
if (dbConn.write()) {
eintraege++;
}
}
retVal = true;
}
} catch (Exception e) {
//Logger.log(e.getMessage().toString());
ivErrorMsg = "Fehler beim Verarbeiten der MySQL Daten";
} finally {
finished = true;
//ivGUI.finished = true;
}
}
return retVal;
}
Ich hoffe, ihr könnt mir vll. ne bessere Lösung zeigen bzw. mir n Tipp geben und mir sagen, warum der Thread sich so komisch verhält.
Liebe Grüße,
Flo