Avatar billede mora Nybegynder
05. oktober 2004 - 23:00 Der er 8 kommentarer og
1 løsning

Threads til Netværk og tunge funktioner

Hvordan får jeg bedst integreret nogle progress screens i mit app ?

Jeg ved hvor jeg har brug for dem i forvejen...

Det ene sted er en række billedoperationer hvor jeg har brug for at update progress info mens den laver udregningerne.

Den anden er kald til XMLRPC via sync kald, her skal jeg ha en progress frame der viser at der sendes/hentes data (Og gerne hvor hurtigt, og hvor meget), men det primære er at der vises en screen med at der er netværks kommunikation.

Som det er nu, låser mine guis blot til de er færdige med deres arbejde som ofte tager flere minutter.


P.S. Jeg leder ikke efter svar som "Threads", men links og pointers til reelle løsningsmodeller som kan integreres i mit guidesign uden at skulle lave for meget om.
Avatar billede arne_v Ekspert
06. oktober 2004 - 09:38 #1
Hvad skal vi sige ?  Du skal bruge en tråd som opdaterer
din JProgresBar !
Avatar billede arne_v Ekspert
06. oktober 2004 - 09:38 #2
Men her er ihvertfald et eksmepel:

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

import javax.swing.*;

public class CopyProgressThread extends JFrame {
    public JProgressBar pbar;
    public CopyProgress() {
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        getContentPane().setLayout(new BorderLayout());
        pbar = new JProgressBar();
        getContentPane().add(pbar, BorderLayout.CENTER);
        pack();
    }
    public static void main(String[] args) {
        CopyProgress cp = new CopyProgress();
        cp.show();
        CopyThread cpthread = new CopyThread("C:\\z.1", "C:\\z.2", cp.pbar);
        cpthread.start();
    }
}

class CopyThread extends Thread {
    private String from;
    private String to;
    private JProgressBar  pbar;
    public CopyThread(String from, String to, JProgressBar pbar) {
        this.from = from;
        this.to = to;
        this.pbar = pbar;
    }
    public void run() {
        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();
        }
    }
}
Avatar billede mora Nybegynder
06. oktober 2004 - 10:20 #3
Har fået det til at virke nogle steder nu :)

Men på download (Mange hurtige downloads) viser den ikke progress bar, bruger den samme klasse til alle, så ved det virker, går udfra det er en thread der ikke får tid til at render jprogressbar færdig for hver update.

Jeg har en jlabel, som jeg selv updatere i samme klasse og denne bliver fint opdateret hele tiden.
Avatar billede mora Nybegynder
06. oktober 2004 - 10:49 #4
prøvede lige at lave progress opdatere sig selv i en anden thread, det ændrede heller ikke noget.

måske jeg skal bruge invokeandwait metoderne i swing?
Avatar billede arne_v Ekspert
06. oktober 2004 - 11:48 #5
Uanset hvad du gør så er der jo noget delay p.g.a. process og thread schedulering.

Hvor hurtige er de downloads som driller ?
Avatar billede mora Nybegynder
06. oktober 2004 - 11:54 #6
74billeder på omkring 20-25sekunder
dvs. 74updates af baren fordelt over den tid...

hvorimod de andre stedet er væsenligt mere, billedebehandlingen er 1-2sec per billede, og upload er gerne 5sec+ per billede, da det er hele billedet der uploades, men kun en thumbnail der hentes.
Avatar billede arne_v Ekspert
06. oktober 2004 - 12:05 #7
Der burde du se ihvertfald en 10-20 ryk på baren.
Avatar billede arne_v Ekspert
24. oktober 2004 - 21:37 #8
Kommet videre ?
Avatar billede mora Nybegynder
20. november 2005 - 00:54 #9
lukker, ved ikke helt hvordan det blev løst, men opaven er ihvertfald afsluttet for lnge siden
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