Výsledky 1 až 6 z 6

Téma: [Java] Observable-Observer, updatovani Canvas, priority

  1. #1
    Senior Member
    Založen
    07.10.2002
    Bydliště
    Prague / Czech Republic
    Příspěvky
    1 221
    Vliv
    290

    Standardní [Java] Observable-Observer, updatovani Canvas, priority

    narazil sem na problem, mam aplikaci s hlavnim oknem, v nem udelany progressbar z Canvasu, zaregistrovany jako Observer vypocetni casti, ktera je odvozena od InputStream a defacto cte z BufferedInputStream, provede vypocet na prectenych datech a vraci novy.. tuhle tridu poustim do AudioSystem.write().. problem je ten, ze sice progressbaru chodi updaty i s potrebnejma informacema o prubehu, nastavuje si svoje promenny pro zobrazeni spravny pozice, ale cely okno je v prubehu vypoctu jakoby vytuhly a dokud se pocita, grafika se neobnovuje, ovsem vypisy pres System.out.print fungujou a prubeh tam sledovat muzu..

    vi nekdo jak se s tim vyporadat? predpokladam, ze to bude chtit nejak predelat vsechno do vlaken a nastavit priority, ten AudioSystem.write() je spoustenej uvnitr run() threadu s nastavenou nejnizsi prioritou..

    diky

    PS: jeste pro upresneni, pokud se nic nepocita a AudioSystem.write() je pusteny na nejakym obyc, treba FileInputStreamu tak za stejnych podminek progressbar funguje pekne, pokud necham prioritu jeho threadu na normalu tak uz obcas vynecha dilek (jsou delany pres drawLine a ne pres drawRectangle), ovsem zarazenim nizke priority se to spravi.. pokud ovsem muj InputStream pocita, cely je to zatuhly a dilek se objevi az ten posledni po skonceni vypoctu
    /// Dell Latitude D600 | Dothan 1.7GHz@1.05V~800MHz@0.70V | 1024MB DDR266@2-3-3-6 | 40GB Hitachi Travelstar 5K80 | Samsung CD-RW/DVD SN-324S | Mobility Radeon 9000 32MB | 14.1" SXGA+ 1400x1050 | Broadcom 570x Gbps LAN | Intel PRO/Wireless 2100B WLAN ///

  2. #2
    Senior Member mince Avatar uživatele mraky
    Založen
    16.10.2002
    Bydliště
    Praha
    Příspěvky
    1 166
    Vliv
    296

    Standardní

    Priority threadu ani resit nemusis. Ono to stejne neni uplne spolehlivy.
    Staci udelat dva thready jeden bude pocitat naky ptakoviny a druhej se ho bude dotazovat jak na tom je a bude refreshovat progressbar.
    Pište česky: hold × holt

    hold – projev pocty nebo úcty (další význam je výkupné, vynucený poplatek ve válce)
    holt – povzdech; ve významu „inu, zkrátka a dobře“

  3. #3

    Standardní

    Zkus volani threadu obalit do SwingUtilities.invokeLater() (pripadne SwingUtilities.invokeAndWait() - to ve tvem pripade ale asi nebude vhodne)

    priklad z dokumentace
    Kód:
    Runnable doHelloWorld = new Runnable() {
         public void run() {
             System.out.println("Hello World on " + Thread.currentThread());
         }
     };
    
     SwingUtilities.invokeLater(doHelloWorld);

  4. #4
    Senior Member
    Založen
    07.10.2002
    Bydliště
    Prague / Czech Republic
    Příspěvky
    1 221
    Vliv
    290

    Standardní

    dik za odpovedi..

    on ten progressbar dostava povely k aktualizaci, akorat to nejak nestiha behem toho, co se zurive pocita a delat konkurencni thready vypoctu a zobrazeni, pricemz zobrazovac se pta, na to sem myslel puvodne, ale od toho je tady prece model Observable-Observer a on skutecne funguje, progressbar je pravidelne updatovanej novou hodnotou, ale jak rikam zapomina se prekreslit.. hlavni okno - frame prece taky bezi jako jeden thread ne? tim, ze se pusti dalsi by nemel celej Frame zustat zaseklej.. uz sem zkousel udelat thread, kterej furt kazdou pul vterinu vola repaint celyho framu, ale opet nic, az potom, co skoncila vypocetni a diskova aktivita.. mam takovy dojem, ze volani jednoho prikazu AudioSystem.write() uvnitr run() metody threadu toho moc nezmuze, zkusim asi nasadit roury a vlastni cteni ze souboru a pocitani mit uvnitr run() a zapisovat do PipedOutputStream a do AudioSystem.write() poslat druhej konec roury, cili PipedInputStream, uvidime, co to udela..
    /// Dell Latitude D600 | Dothan 1.7GHz@1.05V~800MHz@0.70V | 1024MB DDR266@2-3-3-6 | 40GB Hitachi Travelstar 5K80 | Samsung CD-RW/DVD SN-324S | Mobility Radeon 9000 32MB | 14.1" SXGA+ 1400x1050 | Broadcom 570x Gbps LAN | Intel PRO/Wireless 2100B WLAN ///

  5. #5

    Standardní

    A vyzkousels invokeLater() ?

  6. #6
    Senior Member
    Založen
    07.10.2002
    Bydliště
    Prague / Czech Republic
    Příspěvky
    1 221
    Vliv
    290

    Standardní

    to by opravdu nepomohlo, ono to delalo Later uz nak samo od sebe, az moc Later

    uz sem to vyresil za pomoci PipedInputStream a PipedOutputStream a vlaken.. progressbar se prubezne a pohotove obnovuje, a zustal sem u Observable-Observer
    /// Dell Latitude D600 | Dothan 1.7GHz@1.05V~800MHz@0.70V | 1024MB DDR266@2-3-3-6 | 40GB Hitachi Travelstar 5K80 | Samsung CD-RW/DVD SN-324S | Mobility Radeon 9000 32MB | 14.1" SXGA+ 1400x1050 | Broadcom 570x Gbps LAN | Intel PRO/Wireless 2100B WLAN ///

Informace o tématu

Users Browsing this Thread

Toto téma si právě prohlíží 1 uživatelů. (0 registrovaných a 1 anonymních)

Pravidla přispívání

  • Nemůžete zakládat nová témata
  • Nemůžete zasílat odpovědi
  • Nemůžete přikládat přílohy
  • Nemůžete upravovat své příspěvky
  •