Fortschrittsbalken Java
Ich bin mit JProgressBar um die Fortschritte zu zeigen. Aber, Wie um zu zeigen, progressBar, da das laden von 0 auf 100? Ich habe den code aus internet und seine arbeiten, mit Ausnahme der progressBar wird nicht geladen.
code
progressFrame = new JFrame(); //frame to display progress bar
progressBar = new JProgressBar(0,100);
progressBar.setValue(0);
progressBar.setStringPainted(true);
progressFrame.add(progressBar);
new SwingWorker<Void,Void>()
{
protected Void doInBackground() throws SQLException, ClassNotFoundException
{
Class.forName("oracle.jdbc.driver.OracleDriver");
progressBar.setValue(0);
frame.setEnabled(false); //frame = main frame
//tableclass creates a JTable with data from database
tableclass = new TheDatabaseTable(deptName);//it takes time to create
progressBar.setValue(50);
frame.getContentPane().removeAll();
frame.setContentPane(tableclass);
frame.validate();
frame.repaint();
progressBar.setValue(100);
//progressFrame.dispose();
return null;
};
protected void done()
{
//progressFrame.setVisible(false);
frame.setVisible(true);
progressFrame.dispose();
frame.setEnabled(true);
}
}.execute();
Ich würde mich freuen, wenn jemand Bearbeiten Sie den oben genannten code zu arbeiten. Danke.
Look at Antwort. Überschreiben
process
und legen Sie den Wert des Fortschrittsbalken innerhalb dieser Methode. Um es zu aktualisieren, rufen Sie publish
in Ihrem doInBackground
Methode.
InformationsquelleAutor vijay | 2013-03-04
Schreibe einen Kommentar Antworten abbrechen
Du musst angemeldet sein, um einen Kommentar abzugeben.
Verwenden Sie die threads. Entwerfen Sie eine Klasse, die
Runnable
- Schnittstelle die Aktualisierung der Werte wie diese.- und in deiner frame-Klasse verwenden
progressBar
mit der neuen Klasse wie dieseWann immer Sie wollen, um den Wert zu ändern benutzen Sie einfach die Anweisung
Das ist die progress bar maximal. man kann Sie auf 100 wie
jpb.setMaximum(100);
. Dies ist schon im Konstruktor. Einmal überprüfen.-1 nie, NIE erstellen/aktualisieren JEDE Swing-Komponente aus aus der Seite des Event-Dispatching-Thread. Swing verwendet eine single-thread-Modell. Siehe Concucurrneyc in Swing. Dies war eines der Probleme, die mit der ursprünglichen Frage
Okay. werde in diesem Ansatz zu. Ich Schreibe meine Programme wie dieses, und Sie funktionieren reibungslos.
Das problem erstreckt sich von der Tatsache, dass Swing NICHT threadsicher ist (es gibt keine synchronisation). Weil Sie keine Kontrolle über die Farbe Prozess, es ist möglich, dass, wie Sie aktualisieren das Modell, das repaint-manager versuchen, ein repaint, das heißt, Sie könnten am Ende mit schmutzigen Farben. Die Anwendung, die ich geerbt vor 3 Jahren hatte viel code auf diese Weise getan, über einen Zeitraum von 3 Jahren, waren wir in der Lage, entfernen Sie 90% des "fremden" und "unerklärliche" und "schwer zu replizieren" Probleme, indem sichergestellt wird, dass alle UI-updates sind ausgeführt in der EDT
InformationsquelleAutor Ravindra Gullapalli
Gotta love code aus dem internet...oh...
Den code, den Sie haben, gegen die einzelne thread-Regeln des Swing-und somit ein schlechtes Beispiel.
Haben Sie eine Reihe von Optionen, mit
SwingWorker
. Sie konntepublish
den Fortschritt und die Verwendung derprocess
Methode, die Statusanzeige zu aktualisieren, oder Sie könnten einenPropertyChangeListener
und überwachung der Fortschritte verändern die erzeugten Ereignisse durch den Aufruf dersetProgress
Methode derSwingWorker
Um zu vermeiden, inconvertible Art Ausnahme zwischen Objekt und int, ersetzen, Zeile "int progress = (int) evt.getNewValue();" durch "int Fortschritt = ((Integer) evt.getNewValue()).intValue();"
Warum? Es ist autoboxed
Sorry, Kann bitte ignoriert werden! Ich habe die Ausnahme in der version 1.6.0_16.
InformationsquelleAutor MadProgrammer
InformationsquelleAutor Konstantin F
InformationsquelleAutor Dr. Amit Kumar Kapoor