Portal > Foren > Java > Allgemeine Java-Programmierung > ProgressMonitor wird erst am Ende des Vorgangs (komplett) angezeigt
Antwort
 
Themen-Optionen
Alt 03.05.2008, 13:15 Nach oben    #1
Corvin Gröning
 
Benutzerbild von Corvin
 
Registriert seit: 19.03.2005
Ort: S-H | Flensburg
Beiträge: 449
Standard ProgressMonitor wird erst am Ende des Vorgangs (komplett) angezeigt

Ich bastel gerade an einem Tool, welches mir Dateien kopiert. Dazu soll der Fortschritt in einem ProgressMonitor angezeigt werden:
Code:
[...]

monitor = new ProgressMonitor(parent, "Loading Progress", "...", 0,(int) (folderSize/1024));
progress = 0;
monitor.setMillisToDecideToPopup(0);
monitor.setMillisToPopup(0);

[...]

// schleife..
    progress += (int) file.length()/1024;
    monitor.setProgress(progress);
    monitor.setNote(progress + " kb of" + folderSize/1024 + " kb done");             
    copyFile(file, new File(ziel.getAbsolutePath() + System.getProperty("file.separator") + file.getName()));
// ende schleife

[...]
Das Problem ist, dass der ProgressMonitor erst am Ende des gesamten Kopiervorgangs angezeigt wird.

Nach dem starten des Kopiervorgangs:


Wenn alle Dateien kopiert wurden:


Was muss ich machen, damit von Anfang an der Fortschritt angezeigt wird?
__________________
Corvin ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 03.05.2008, 13:43 Nach oben    #2
Projektleiter
 
Registriert seit: 30.11.2005
Ort: Bottrop
Beiträge: 1.107
Standard

Du musst den Kopiervorgang außerhalb des EDTs starten.

Soll heißen:
Code:
monitor = new ProgressMonitor(parent, "Loading Progress", "...", 0,(int) (folderSize/1024));
progress = 0;
monitor.setMillisToDecideToPopup(0);
monitor.setMillisToPopup(0);

[...]
runner = new Thread() {
    public void run() {
        // schleife..
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                progress += (int) file.length()/1024;
                monitor.setProgress(progress);
                monitor.setNote(progress + " kb of" + folderSize/1024 + " kb done");
            }
        });
        copyFile(file, new File(ziel.getAbsolutePath() + System.getProperty("file.separator") + file.getName()));
// ende schleife
    }
};
runner.start();
usw.
__________________
Patrick Gotthardts Weblog.
pago ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 03.05.2008, 14:24 Nach oben    #3
Corvin Gröning
 
Benutzerbild von Corvin
 
Registriert seit: 19.03.2005
Ort: S-H | Flensburg
Beiträge: 449
Standard

So hab ich das jetzt:

Code:
                Thread runner = new Thread() {
                    public void run() {
                        SwingUtilities.invokeLater(new Runnable() {
                            public void run() {
                                progress += (int) file.length()/1024;
                                monitor.setProgress(progress);
                                monitor.setNote(progress + " kb of" + folderSize/1024 + " kb done");
                            }
                        });
                        try {  
                            copyFile(file, new File(ziel.getAbsolutePath() + System.getProperty("file.separator") + file.getName()));
                        } catch (FileNotFoundException ex) {
                            Logger.getLogger(CopyDirectory.class.getName()).log(Level.SEVERE, null, ex);
                        } catch (IOException ex) {
                            Logger.getLogger(CopyDirectory.class.getName()).log(Level.SEVERE, null, ex);
                        }
                    }
                };
                runner.start();


[...]


    public void copyFile(File file, File ziel) throws FileNotFoundException, IOException {       
       //System.out.println("Copy " + file.getAbsolutePath() + " to " + ziel.getAbsolutePath());
        in = new BufferedInputStream(new FileInputStream(file));
        out = new BufferedOutputStream(new FileOutputStream(ziel, true));
        int bytes = 0;
        while ((bytes = in.read()) != -1) {
            out.write(bytes);
        }
        in.close();
        out.close();
    }
Beim starten des Kopiervorgangs erhalte ich folgene Fehlermeldung:
Zitat:
03.05.2008 14:20:08 net.cgroening.jFolderBackup.CopyDirectory$1 run
SCHWERWIEGEND: null
java.io.IOException: The handle is invalid
at java.io.FileOutputStream.close0(Native Method)
at java.io.FileOutputStream.close(FileOutputStream.ja va:279)
at java.io.FilterOutputStream.close(FilterOutputStrea m.java:143)
at net.cgroening.jFolderBackup.CopyDirectory.copyFile (CopyDirectory.java:102)
at net.cgroening.jFolderBackup.CopyDirectory$1.run(Co pyDirectory.java:80)
03.05.2008 14:20:08 net.cgroening.jFolderBackup.CopyDirectory$1 run
SCHWERWIEGEND: null
java.io.IOException: The handle is invalid
at java.io.FileOutputStream.close0(Native Method)
at java.io.FileOutputStream.close(FileOutputStream.ja va:279)
at java.io.FilterOutputStream.close(FilterOutputStrea m.java:143)
at net.cgroening.jFolderBackup.CopyDirectory.copyFile (CopyDirectory.java:102)
at net.cgroening.jFolderBackup.CopyDirectory$1.run(Co pyDirectory.java:80)
BUILD SUCCESSFUL (total time: 8 seconds)
(Zeile 102 habe ich oben im Quellcode fett markiert)

Wo genau liegt das Problem? Eine Google-Suche nach der Fehlermeldung hat mich nicht weitergebracht.
__________________
Corvin ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 03.05.2008, 15:03 Nach oben    #4
Projektleiter
 
Registriert seit: 30.11.2005
Ort: Bottrop
Beiträge: 1.107
Standard

Nen Fehler seh ich da auch nicht. Einzig die Art, wie du die Zieldatei bestimmt, ist verbesserungswürdig:
Code:
copyFile(file, new File(ziel, file.getName()));
Vor der Änderung hat es funktioniert? Änderst du den Wert von file/ziel irgendwo?

Mein Beispiel war eigentlich so gedacht, dass du für den kompletten Kopiervorgang nur einen Thread verwendest. Bei dir sieht es so aus, als ob du bei jedem Schleifendurchlauf einen neuen Thread starten würdest. Das geht im Prinzip auch, du bekommst aber eben Probleme wenn file und ähnlich sich verändert.
__________________
Patrick Gotthardts Weblog.
pago ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 03.05.2008, 16:08 Nach oben    #5
Corvin Gröning
 
Benutzerbild von Corvin
 
Registriert seit: 19.03.2005
Ort: S-H | Flensburg
Beiträge: 449
Standard

Zitat:
Zitat von pago Beitrag anzeigen
Mein Beispiel war eigentlich so gedacht, dass du für den kompletten Kopiervorgang nur einen Thread verwendest. Bei dir sieht es so aus, als ob du bei jedem Schleifendurchlauf einen neuen Thread starten würdest. Das geht im Prinzip auch, du bekommst aber eben Probleme wenn file und ähnlich sich verändert.
Daran lag es. Vielen Dank für die schnelle Hilfe!
__________________
Corvin ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Was passiert mit einem Objekt am Ende des Skripts? Jan PHP-Programmierung 5 02.11.2007 07:39
Textumbruch erst am ende des containers Doggi HTML, XML und CSS 12 28.10.2005 07:15
Pong Klon hii Allgemeine Java-Programmierung 0 07.08.2005 08:25


Alle Zeitangaben in WEZ +2. Es ist jetzt 16:12 Uhr.


Powered by vBulletin® Version 3.7.3 (Deutsch)
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44