Hallo,
ich stehe leider irgendwie auf dem Schlauch. Es geht um ein Problem mit Threads bzw. SwingUtilities.invokelater()... Ich habe schon gefühlt 1000 Dinge probiert, aber irgendwo hakt es noch, bin zugegebener Maßen auch kein Thread-Experte. Ich weiß schon, was das Problem ist, weiß aber leider nicht, wie und wo ich da ran gehen soll.
Hier die genaue Beschreibung:
Ich habe eine Klasse, die von JFrame erbt.
In dieser wird die GUI eines Programmes zusammengebaut. Darin befindet sich u.a. ein JTable.
Dieser soll mit Daten aus einer DB gefüllt werden. Jetzt kommt's: Es kann vorkommen, dass dies sehr viele Daten sind. Während der Ladezeit der Daten will ich eine JProgressbar anzeigen lassen, die aufpoppen soll.
Und hier weiß ich nicht, wo und wie ich dies genau mache, denn ich habe das altbekannte Problem, dass die Progressbar "einfriert" und erst, wenn die Daten geladen und der JTable gefüllt ist, diese auf 100% springt und dann verschwindet. Der Frame, in dem der JTable drin ist, kann ruhig einfrieren, es wäre aber schön, wenn die Progressbar sich bewegt.
Ich hoffe, ich konnte mich klar ausdrücken und ich weiß, das Problem wurde schon 1000 Mal besprochen. Leider stehe ich auf dem Schlauch und habe wohl immer an den falschen Stellen angesetzt. Ich bin für jede Hilfe sehr dankbar!
Vielen Dank!!
Hier nun etwas Code, bereinigt um die unwichtigen Sachen:
ich stehe leider irgendwie auf dem Schlauch. Es geht um ein Problem mit Threads bzw. SwingUtilities.invokelater()... Ich habe schon gefühlt 1000 Dinge probiert, aber irgendwo hakt es noch, bin zugegebener Maßen auch kein Thread-Experte. Ich weiß schon, was das Problem ist, weiß aber leider nicht, wie und wo ich da ran gehen soll.
Hier die genaue Beschreibung:
Ich habe eine Klasse, die von JFrame erbt.
In dieser wird die GUI eines Programmes zusammengebaut. Darin befindet sich u.a. ein JTable.
Dieser soll mit Daten aus einer DB gefüllt werden. Jetzt kommt's: Es kann vorkommen, dass dies sehr viele Daten sind. Während der Ladezeit der Daten will ich eine JProgressbar anzeigen lassen, die aufpoppen soll.
Und hier weiß ich nicht, wo und wie ich dies genau mache, denn ich habe das altbekannte Problem, dass die Progressbar "einfriert" und erst, wenn die Daten geladen und der JTable gefüllt ist, diese auf 100% springt und dann verschwindet. Der Frame, in dem der JTable drin ist, kann ruhig einfrieren, es wäre aber schön, wenn die Progressbar sich bewegt.
Ich hoffe, ich konnte mich klar ausdrücken und ich weiß, das Problem wurde schon 1000 Mal besprochen. Leider stehe ich auf dem Schlauch und habe wohl immer an den falschen Stellen angesetzt. Ich bin für jede Hilfe sehr dankbar!
Vielen Dank!!
Hier nun etwas Code, bereinigt um die unwichtigen Sachen:
Code:
public final class GUI extends javax.swing.JFrame {
public GUI() {
initComponents(); // von Netbeans erstellte Methode, zeichnet die GUI-Elemente
initTableFromConfig();
formComponentShown(null);
}
public void initTableFromConfig() {
// initialisiert Anfangswerte...
}
private void formComponentShown(java.awt.event.ComponentEvent evt) {
// ... weiter Befehle ...
// In dieser Methode, die aufgerufen wird, wenn der Frame angezeigt wird, rufe ich die Methode auf, die die Tabelle füllen soll:
aktualisiereTable();
// ... weiter Befehle ...
}
public void aktualisiereTable() {
runAkt = new Thread() {
@Override
public void run() {
updateGUI();
}
};
runAkt.start();
}
private void updateGUI() {
SwingUtilities.invokeLater(runAktualisiereTable);
}
Runnable runAktualisiereTable = new Runnable() {
@Override
public void run() {
// ... weiter Befehle ...
// Hier wird dann die Tabelle gefüllt mit Daten in einer Schleife mit folgendem Befehl:
meinTable.setValueAt("Beispieltext", row, col);
// Dabei würde ich gerne eine JScrollbar hochzählen lassen.
// ... weiter Befehle ...
}
};