Zdravím, mám takový malý problém a to ten, že mi nejde rozchodit ProgressBar, mám metodu, která obsahuje cyklus for a podle jeho inkrementace potřebuji updatovat ProgressBar, při spuštění se nic neděje a až cyklus skončí ProgressBar se objeví full...Nevím co s tím..
Fórum › Java
ProgressBar
tipnul bych, že to bude díky tomu, že to běží ve stejným vlákně, jak cyklus tak aktualizace pbaru
aby to fungovalo, musel bys aktualizaci pbaru dat do separátního vlákna nebo řešit jinak, ale asynchroně
Přesně tak .. chápej to tak, že aplikace standartně běží v 1 vlákně a když děláš aplikaci s GUI, tak to jedno vlákno se stará o vykreslování prvků ( zakřížkování CheckBoxu, když klikneš, kliknutí na tlačítko, kreslení progressBar) a ty když tohle vlákno zatížíš nějakým výpočtem (cyklem ve kterým inkrementuješ ten PBar) tak to vlákno nemůže dělat 2 věci najdnou.
- 1 - hlavní vlákno, ve kterém vytvoříš ProgBar
- 2 - vlákno ve kterém spustíš výpočet a postupně budeš ten PBar updatovat
To je jako kdybys lil vodu do sklenice a přitom si chtěl říkat kolik tam je vody .. a přitom mohl naráz dělat jenom jednu věc .. to nejde, na to potřebuješ 2 lidi .. 1 co leje a 1 co povídá :)
Fakulta aplikovaných věd www.fav.zcu.cz
"Když nedokážete říci věci jednoduše, pak jim dostatečně nerozumíte"
Díky moc, trošku jsem se na to díval a je mi jasné, že budu muset předávat proměnnou, podle které se bude PBar updatovat a proměnnou s MaxValue, ale pořád nechápu skladbu toho programu s dvěma vlákny, nemohli by jste někdo hodit sem malý příklad s jedním forem v jednom vlákně a PBarem v druhém? Dělám to v NetBeansech a jejich JFrameu. Díky moc.
skoro první link v googlu .... http://www.java2s.com/Code/Java/Swing-JFC/ProgressBarStep.htm
podrobněji se podívej na objekt Runnable a nauc se pouzivat google ;)
No .. normálně v mail si vytvoříš Form, do něj vložíš jProgressBar, nastavíš rozměry a zobrazíš. A spustíš vlákno (napíšeš třídu s vláknem), které může mít třeba tenhle kod:
class Vlakno implements Runnable{
int i;
jProgressBar pBar;
Vlakno(final jProgressBar param){
super();
this.pBar = param;
}
@Override
public void run() {
for(i=0; i<101; i++){
pBar.setValue(i);
try {
Thread.sleep(100);
} catch (InterruptedException ex) {
System.out.printf("!! Systemova chyba , vlakno nejde uspat!!");
}
}
}
jako param si předáš ten jProgressBar, jehož nastavení potom ovlivňuješ .. když to nebudeš stále chápat, napiš a pošlu ti to celý .. ae snaž se to udělat sám
Fakulta aplikovaných věd www.fav.zcu.cz
"Když nedokážete říci věci jednoduše, pak jim dostatečně nerozumíte"
Přidej příspěvek
Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku
×Vložení zdrojáku
×Vložení obrázku
×Vložení videa
Uživatelé prohlížející si toto vlákno
Podobná vlákna
ProgressBar — založil Frank
Multithread a progressbar — založil aerkain
"Kulatý" progressbar - winapi — založil ProXicT
Silverlight - dataBinding z kódu - ProgressBar — založil Petrroll
C# Progressbar fungující i pod zatížením — založil Attila
Moderátoři diskuze