Probleme mit JProgressBar bei der Statusanzeige

  • Themenstarter Themenstarter Gelöschtes Mitglied 28048
  • Beginndatum Beginndatum
G

Gelöschtes Mitglied 28048

Gast
Hallo liebe Java-Community!

habe ein kleines Problem mit meinem JProgressBar. Der aktuelle Status(z.B. 50%) wird leider nicht auf der GUI angezeigt, jedoch ist der Wert, den man über
Java:
JProgressBar.getValue()
bekommt, korrekt. Das Programm soll eine SQL-Dump-Datei herunterladen und der Status wie bereits gesagt auf der GUI angezeigt werden.

Was ist da nur los???

Hier ein kleiner Programmausschnitt:

Java:
public void download() throws IllegalStateException, MalformedURLException,ProtocolException, IOException
    {
        try
        {
            final String url_str = "http://hier.steht.die.url" ;
            FileOutputStream fos = new FileOutputStream("hier.steht.der.Dateiname");
            URL url = new URL(url_str.replace(" ", "%20"));
            HttpURLConnection conn = (HttpURLConnection) url.openConnection();
            conn.setRequestMethod("GET");
            conn.connect();
            int length = conn.getContentLength();
            int responseCode = conn.getResponseCode();
            if (responseCode == HttpURLConnection.HTTP_OK)
            {
                byte tmp_buffer[] = new byte[4096];
                InputStream is = conn.getInputStream();
                int n = 0;
                int downloaded = 0;
// ab hier erfolgt der download mit buffer
                while ((n = is.read(tmp_buffer)) > 0)
                {
                    downloaded = downloaded + n;
                    System.out.println("downloaded" + downloaded);
                    fos.write(tmp_buffer, 0, n);
                    fos.flush();
// d ist die variable, die den Status der progressbar liefert(min 0, max 100)
                    int d =  (int) downloaded * 100 / length;
                    System.out.println(d);
                    MeinprogrammView.progressBar.setValue(d);
                }
            }
            else
            {
                throw new IllegalStateException("HTTP response: " + responseCode);
            }
            fos.close();
            MeinprogrammView.progressBar.setValue(100);
// Mitteilung über erfolgreichen Download
            JOptionPane.showMessageDialog(null, "Download der aktuellen Datenbank erfolgreich!","Datenbank Aktualisierung erfolgreich", JOptionPane.INFORMATION_MESSAGE);
        }
// falls ein Fehler kommt, wird dieser hier abgefangen werden
        catch (Exception e)
        {
            e.printStackTrace();
            JOptionPane.showMessageDialog(null, "Download der aktuellen Datenbank fehlgeschlagen","Datenbank Aktualisierung fehlgeschlagen", JOptionPane.OK_OPTION);
        }
    }


Vielen Dank für eure Hilfe

Grüße

Olli123
 
Zuletzt bearbeitet:
Ich nehme an dass download() auf dem EDT aufgerufen wird. Damit ist der belegt und kann die GUI nicht aktualisieren.
=> Methoden die Lange laufen immer in einem eigenen Thread ausführen, sonst friert die GUI ein. Schau dir da z.b. mal den SwingWorker an.
 
Hi!

Jo auf die Idee bin ich auch schon gekommen. Ich probiers jetzt noml und falls es net gehen sollte, werde ich mich nochmal melden.

Danke dir auf jeden Fall!!!!


Grüße

Olli123


Edit:


Habe folgendes hinzugefügt:

Java:
public void run()
    {
        try {
            download();
        } catch (IllegalStateException ex) {
            Logger.getLogger(SListUpdateDatabase.class.getName()).log(Level.SEVERE, null, ex);
        } catch (MalformedURLException ex) {
            Logger.getLogger(SListUpdateDatabase.class.getName()).log(Level.SEVERE, null, ex);
        } catch (ProtocolException ex) {
            Logger.getLogger(SListUpdateDatabase.class.getName()).log(Level.SEVERE, null, ex);
        } catch (IOException ex) {
            Logger.getLogger(SListUpdateDatabase.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

Ich rufe jetzt die run()-methode extern auf, aber es klappt leider immer noch nicht....

Grüße

Olli123
 
Zuletzt bearbeitet:
-.- brainfail. Danke dir.... Manchmal sind es die einfachsten Sachen 😳
 
sry wegen doppelpost. hat sich jetzt endgültig erledigt xD


Grüße

Oll123
 
Zuletzt bearbeitet:

Zurück
Oben