Hirdetés
- Kormányok / autós szimulátorok topikja
- Azonnali informatikai kérdések órája
- Minden fronton drágulást vár a DRAM-piacon a Trendforce
- Samsung LCD és LED TV-k
- Multimédiás / PC-s hangfalszettek (2.0, 2.1, 5.1)
- Melyik tápegységet vegyem?
- Bemutatta a Panther Lake kiscica verzióját az Intel
- Milyen egeret válasszak?
- Milyen notebookot vegyek?
- Egér probléma
Új hozzászólás Aktív témák
-
Frigo
őstag
SwingWorker lesz ami neked kell. Itt egy példa Progressbar-ral
-
Karma
félisten
Huh, erős kód. Meg egy kicsit erjedt is. Ha már egyszer a progressbar értékét is másik szálból közvetlenül babrálod a setValue-val, miért nem hívod meg a dialógus setVisible-jét amikor vége?
Félreértéseket elkerülendő, ez így nagyon-nagyon nem jó megoldás, de legalább begipszelnéd a lyukat

A probléma ugyanis az, hogy a Swing (meg úgy egyébként a legtöbb UI framework) nem szereti azt, ha a UI szálon kívül (itt event dispatcher threadnek hívják) bármit módosítasz. Jobb helyeken egy hatalmas exceptiont kapsz a nyakadba, itt úgy tűnik nem.
A dialógus elindítása még rendben van, a másik szálból nem szabadna közvetlenül hívogatni a setValue-t.
Fontos megjegyezni, mert ahogy látom itt félreértés van: az új szál indításával a vezérlés két, párhuzamosan futó részre szakadt. Ez a mondatod: A kérdés, ha végzett a run() metódus, hogyan tudom ezt a szálat leállítani és visszaadni a másiknak a vezérlést." értelmetlen, az indító dialógusos kód nem vesztette el a szálát, egyszerűen visszatért az eseményekre várakozó állapotba. Ezt végzi is, csak a modális dialógus miatt nem törődik máshova irányuló kattintásokkal és billentyűleütésekkel.
Magára a problémára visszatérve, egy kicsit szerteágazik a megoldás, mert olyan alap dolgokkal kellene tisztában lenned, mint a UI (dialógus, progressbar helyzete) elválasztása az üzleti logikától (fájlmásolás száz bájtonként). Kéne egy rendes Listener interfész, amit a másoló hívogat (ezen keresztül jelentve a százalékos állást, számként), és a programGUI-d implementálja.
Ehhez az implementációhoz meg a SwingUtilities.InvokeLater-t kéne használnod, hogy a dispatcher szálon fusson le a tényleges progress bar frissítés, meg a dialógus elrejtése.
Így nem függene a másolód attól, hogy a UI-on milyen komponensek vannak és hogy hívják őket, csak a dolgát végezné

-
Davs
tag
Java concurrency . Az elso link jonak tunik, az a hivatalos dokumentacio (ha jo angolul)
Amugy minden GUI-nal ugy van, hogy azon a szalon, ahol a JFrameket stb- t csinalod nem szabad komolyabb, sokaig tarto dolgokat csinalni, mert az igy leblokkolja a GUI-t (ami igy nem tudja ellenorizni, hogy tortent-e uj Event -billentyulenyomas, egerklikk, progressbar changge- stb.
-
Karma
félisten
Egyszerű, az átlátszó ablak miatt adnia kéne magát. A probléma az, hogy a UI szálban végzel blokkoló IO műveletet, ezért amíg a másolás tart, nem tudja frissíteni a frame-et.
A legegyszerűbb, Java 6 és előtti megoldáshoz külön szálat kéne indítanod, amiben ezt a másolást végzed, és periodikusan visszajelzel a progressről a UI szálnak - ami frissíti a progressbart.
Java 7 alatt már van AsynchronousFileChannel ilyesmihez, de nem ismerem (hatosnál leragadtam).
Új hozzászólás Aktív témák
Hirdetés
A topicot kiemeltem. Valaki nem akar egy nyitó hsz-t írni?:))
- Arena Breakout: Infinite
- Kormányok / autós szimulátorok topikja
- Gyúrósok ide!
- Azonnali informatikai kérdések órája
- Minden fronton drágulást vár a DRAM-piacon a Trendforce
- BestBuy topik
- PH!otósok beszélgetős, offolós topikja
- Samsung LCD és LED TV-k
- Proxmox VE
- Multimédiás / PC-s hangfalszettek (2.0, 2.1, 5.1)
- További aktív témák...
- GAMER PC! i5-13500 / RTX 3070 Ti / 16GB DDR / 512GB NVMe / 650w!
- Eladó Precision 7540 FHD IPS i7-9850h Radeon Pro WX 3200 32 512 magyarított bill + külső hangkártya
- Kingston HyperX FURY RGB 2x16GB DDR4 3200MHz CL16 Eladó!
- iPad Air 10.9" M1 2022 - full doboz, garancia (118)
- Dell Pro 14 Premium PA14250 14" 3K OLED érintő Ultra 7 268V 32GB 512GB magyarított vbill gar
- Lenovo X390 i5 8265U, 8GB RAM, 256-512GB SSD, jó akku, számla, 6 hó gar
- HP ProDesk 600 G2,G3 Mini és 600 G2 MT , félkonfig, bővítési opció, mini PC/NAS/HTPC alap
- Asus laptop E1504F Ryzen 3
- 27% - ASUS ZenDrive U9M optikai meghajtó DVD RW Ezüst
- AKCIÓ! Intel Core i5 8500 6 mag 6 szál processzor garanciával hibátlan működéssel
Állásajánlatok
Cég: Laptopműhely Bt.
Város: Budapest



