/ Forside / Teknologi / Udvikling / Java / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
Java
#NavnPoint
molokyle 3688
Klaudi 855
strarup 740
Forvirret 660
gøgeungen 500
Teil 373
Stouenberg 360
vnc 360
pmbruun 341
10  mccracken 320
JProgressBar og Thread
Fra : Os4


Dato : 19-11-01 14:46

JProgressBar og Thread

I et program får 6 terninger, tilfældige værdier (1-6).
Alle værdierne bliver ens, hvis der ikke laves en pause med Thread.pause()
(Prøv selv!).
For at gøre værdierne helt tilfældige, er tiden for Thread.pause() tilfældig
(1-5000).
På grund af at program vil gå i stå et stykke tid, vil jeg gerne lave en
JProgressBar der bliver forøget for hver terning.

Mit problem: Min JProgressBar virker ikke!
Måske har problemet noget med Thread at gøre, men jeg kende ikke nok til
Threads til at kunne vide det.

Min kode:

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.util.Date;
import java.util.Random;

....

JProgressBar progressBar = new JProgressBar(0, 6);
int[] diceVal = {0, 0, 0, 0, 0, 0};

....

progressBar.setValue(0);
progressBar.setStringPainted(true);

....

for (int i = 0; i < diceVal.length; i++)
{
try {Thread.sleep(new Double(new Random(new
Date().getTime()).nextDouble() * 4999 + 1).longValue()) ;} // Sleep i 1-5000
ms
catch (InterruptedException e){}
diceVal[i] = new Double(Math.floor(new Double(new Random(new
Date().getTime()).nextDouble() * 6 + 1).doubleValue())).intValue(); //
Tilfældig værdi
progressBar.setValue(progressBar.getValue() + 1); // Forøg progressBar
med 1
}

progressBar.setValue(0); // Reset



 
 
Filip Larsen (19-11-2001)
Kommentar
Fra : Filip Larsen


Dato : 19-11-01 23:18

"Os4" skrev

> I et program får 6 terninger, tilfældige værdier (1-6).
> Alle værdierne bliver ens, hvis der ikke laves en pause med Thread.pause()

Man laver normalt kun een Random fra hvilken man så udtrækker det antal tal
man har brug for, for eksempel:

int[] dices = new int[6];
Random rand = new Random(); // eller Random(seed)
for (int i = 0; i < dices.length; i++) {
dices[i] = rand.nextInt(6)+1;
}


> Mit problem: Min JProgressBar virker ikke!
> Måske har problemet noget med Thread at gøre, men jeg kende ikke nok til
> Threads til at kunne vide det.

Det har noget med tråde at gøre, ja. Alle de ændringer man laver i sine
GUI-komponenter under en callbak bliver først "ført ud på skærmen" når man
returnere fra callback metoden. Har man derfor en længerevarende operation,
kan man starte den i en ny (eller anden) tråd, og fra denne tråd kan man så
med mellemrum bruge fx. javax.swing.SwingUtilities.invokeLater til at
opdatere sin GUI.

Hvis du ønsker at forstå hvad der forgår bliver du nok nødt til at kaste dig
ud i noget læsning, fx.

http://java.sun.com/docs/books/tutorial/uiswing/components/progress.html
http://java.sun.com/docs/books/tutorial/uiswing/misc/threads.html
http://java.sun.com/j2se/1.4/docs/api/java/util/Random.html


Mvh,
--
Filip Larsen <filip.larsen@mail.dk>



Søg
Reklame
Statistik
Spørgsmål : 177552
Tips : 31968
Nyheder : 719565
Indlæg : 6408847
Brugere : 218887

Månedens bedste
Årets bedste
Sidste års bedste