ProgressBar in einem Thread?

Status
Nicht offen für weitere Antworten.

Math55

Bekanntes Mitglied
hallo, ich möchte, während mein programm arbeitet am unteren rand eine progressbar anzeigfen, welche hin und her geht, solange das programm arbeietet. muss ich das in einem extra thread starten? denn ohne funzt das nicht...:-(

danke
 
dabei habe ich ein beispiel ,die kannst du nutzen.

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

public class Test extends JApplet {
    JProgressBar pb = new JProgressBar();

    public void init() {
        Container contentPane = getContentPane();
 final   JButton startButton = new JButton("start");

        contentPane.setLayout(new FlowLayout());
        contentPane.add(startButton);
        contentPane.add(pb);

        startButton.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e)
             {
                GetInfoThread t = new GetInfoThread(Test.this);
                t.start();

                // this is ok, because actionPerformed
                // is called on the event dispatch thread
               startButton.setEnabled(false);
            }
        });
    }
    public JProgressBar getProgressBar() {
        return pb;
    }
}
class GetInfoThread extends Thread {
    Runnable runnable;
    int value;

    public GetInfoThread(final Test applet) {
        runnable = new Runnable() {
            public void run() {
                JProgressBar pb = applet.getProgressBar();
                pb.setValue(value);
            }
        };
    }
    public void run() {
        while(true) {
            try {
                Thread.currentThread().sleep(500);

                // This is okay because the runnableís run()
                // is invoked on the event dispatch thread
                value = (int)(Math.random() * 100);
                SwingUtilities.invokeLater(runnable);
            }
            catch(InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
}
 
hi, ja aber eben so gehts nicht. ich habe auch am start er arbeit mit

setIndeterminate(true)

versucht die bewegung zu starten. aber das geht nicht. mach ich das an einer anderen stelle, kein problem. aber eben an dieser speziellen stelle nicht. also ich habs so:

Code:
....
setIndeterminate(true);
//das program arbeitet....
........................................

//fertig
setIndeterminate(false);


aber die progressbar ändert sich nicht :-( ne idee?

DANKE
 
Nimm nen Timer!

Anbei eine anonyme Timer Klasse!
Code:
import java.util.Timer;
import java.util.TimerTask; //musst gucken ob die passen, schreib das ausm Kopf raus!
private void DoSth()
{
....
  Timer Timi = new Timer();
  Timi().scheduleAtFixRate(new TimerTask(){
    public void run()
    {
      SetPlusBar();
    }
  },500,500); //das erste 500 heißt, nach einer halben sekunde, das 2te heißt alle halbe sekunde wiederholen!
}

public void SetPlusBar()
{
  jpBar.setValue(jpBar.getValue()+1);
  //wenn maximum erreicht ist aufhören
  if(jpBar.getValue() == jpBar.getMaximum())
    Timi.cancel();
}
[/code]
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben