Avatar billede jesperbaldur Nybegynder
04. oktober 2003 - 14:03 Der er 15 kommentarer og
1 løsning

Filkopierings-proces linie

Jeg skal kopiere et antal filer fra destination_1 til destination_2. Men jeg ville gerne have lavet en proceslinie, som viser hvor langt i kopieringen den er nået. Men hvordan kan man lave det?
Et godt eks ville være at foretrække :-)
Avatar billede arne_v Ekspert
04. oktober 2003 - 14:10 #1
Du mener en JProgessBar ?
Avatar billede madox Nybegynder
04. oktober 2003 - 14:12 #2
garanteret...vidste ikke der fandtes sådan en :-)
Avatar billede jesperbaldur Nybegynder
04. oktober 2003 - 14:15 #3
Hvordan fungerer den. Skal jeg indlæse filernes størrelse, og så udregne den procentdel som den har kopieret når den enkelte fil er kopieret ??
Avatar billede arne_v Ekspert
04. oktober 2003 - 14:15 #4
Jeg har vist ikke et eksemple med den liggende.

Men jeg har et med ProgressMonitor (fra tidligere spørgsmål):

package test;

import java.awt.event.*;
import javax.swing.*;

public class ProgTest extends JFrame {
    private ProgressMonitor progressMonitor;
    private Timer timer;
    private DummyEncrypter aes = new DummyEncrypter();
    public ProgTest() {
        super();
        progressMonitor =
            new ProgressMonitor(this, "Encryption", "Running", 0, aes.getLength());
        progressMonitor.setProgress(0);
        timer = new Timer(1000, new TimerListener());
        timer.start();
        (new EncrypterThread(aes)).start();
        aes.encrypt();
    }
    class TimerListener implements ActionListener {
        public void actionPerformed(ActionEvent evt) {
            progressMonitor.setProgress(aes.getCurrent());
            if (aes.isDone()) {
                timer.stop();
            }
        }
    }
    public static void main(String[] args) throws Exception {
        ProgTest f = new ProgTest();
        f.addWindowListener(new WindowAdapter() {
            public void windowClosing(WindowEvent e) {
                System.exit(0);
            }
        });
        f.pack();
        f.setVisible(true);
    }
}

class DummyEncrypter {
    private final static int N = 100;
    private int n = 0;
    public int getCurrent() {
        if (n < N)
            n++;
        return n;
    }
    public int getLength() {
        return N;
    }
    public boolean isDone() {
        return (n >= N);
    }
    public void encrypt() {
        while (!isDone()) {
            try {
                Thread.sleep(100);
            } catch (InterruptedException e) {
            }
        }
    }
}

class EncrypterThread extends Thread {
    private DummyEncrypter aes;
    public EncrypterThread(DummyEncrypter aes) {
        this.aes = aes;
    }
    public void run() {
        aes.encrypt();
    }
}
Avatar billede arne_v Ekspert
04. oktober 2003 - 14:16 #5
Prøv og kør det eksempel og se om det er noget tilsvarende du vil.
Avatar billede arne_v Ekspert
04. oktober 2003 - 14:20 #6
Avatar billede arne_v Ekspert
04. oktober 2003 - 14:22 #7
OK ?
Avatar billede jesperbaldur Nybegynder
04. oktober 2003 - 14:59 #8
er lige i gang med at kigge på det. Er  ikke så hurtig :-)
Avatar billede arne_v Ekspert
04. oktober 2003 - 15:01 #9
Det sidste link refererer bl.a. til følgende eksempel:
  http://java.sun.com/docs/books/tutorial/uiswing/components/example-swing/ProgressBarDemo.java

(som sikert er meget bedre end min kode)
Avatar billede jesperbaldur Nybegynder
04. oktober 2003 - 15:09 #10
får en fejl ved det eksempel. "LongTask" er rød i JBuilder
Avatar billede arne_v Ekspert
04. oktober 2003 - 15:12 #11
Avatar billede jesperbaldur Nybegynder
04. oktober 2003 - 15:14 #12
hvor er jeg dum....mangler jo filen LongTask
Avatar billede arne_v Ekspert
04. oktober 2003 - 15:14 #13
Her er et simpelt eksempl kodet af mig:

import java.awt.*;
import java.io.*;

import javax.swing.*;

public class CopyProgress extends JFrame {
    private JProgressBar pbar;
    public CopyProgress() {
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        getContentPane().setLayout(new BorderLayout());
        pbar = new JProgressBar();
        getContentPane().add(pbar, BorderLayout.CENTER);
        pack();
    }
    public void copy(String from, String to) {
        pbar.setMaximum((int)(new File(from)).length());
        pbar.setValue(0);
        pbar.setStringPainted(true);
        try {
            InputStream is = new FileInputStream(from);
            OutputStream os = new FileOutputStream(to);
            int total = 0;
            byte[] b = new byte[1000];
            int n;
            while((n = is.read(b)) >= 0) {
                os.write(b, 0, n);
                total += n;       
                pbar.setValue(total);
            }
            is.close();
            os.close();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    public static void main(String[] args) {
        CopyProgress cp = new CopyProgress();
        cp.show();
        cp.copy("C:\\z.1", "C:\\z.2");
    }
}
Avatar billede jesperbaldur Nybegynder
04. oktober 2003 - 15:14 #14
ja...
Avatar billede jesperbaldur Nybegynder
04. oktober 2003 - 15:15 #15
det prøver jeg lige
Avatar billede jesperbaldur Nybegynder
04. oktober 2003 - 15:19 #16
Det virker perfekt. Tak for hjælpen
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester