» »

Java threadi

Java threadi

l0g1t3ch ::

Imam aplicaijo ki je zaenkrat sestavljena iz 2h classov / threadov in sicer GUI del in pa background thread, ki neki preračunava.
Sedaj je narejeno tako, da ob zagonu aplikacije kreiram ta background thread mu podam referenco na JPanel, ki je na GUI delu nato pa thred steče in na Jpanelu vsakic ko dokonca izračun pokaže rezultat.

Problem je pa v tem da izracuni trajajao zelo različno dolgo od nekaj ms pa do cca 20s(redko). Tako, da se slike ne menjajo v lepih enako dolgih intervalih.
Razmišlju sm da bi nekak naredu en buffer v katerega bi ta background thread šopu rezultate, potem pa bi imel še nek drug thread recimo mu SlideShow, ki bi pobiral slike iz tega bufferja in jih prikazoval.

Sam se mi pa nič kaj ne sanja kako to delovanje uskladiti tako, da se bo prikaz začel šele ko bo v bufferju neko število slik in ga po potrebi tudi ustaviti če se buffer slučajno izprazni.
Če ima kdo kako idejo kako naj se zadeve lotim bi bil zelo vesel pomoči, hvala.

hasek ::

Mogoce bi si lahko pogledal metode wait() pa notify ter notifyAll() morda ti bodo pomagale

dejansko lahko naredis tako da recimo tisti GUI caka na notifikacijo iz drugega threda, da je koncal. (ali pa naredis to preko se enega threda in tisti caka na notifikacijo da osvezi Jpanel
there is no hope for you

gearsonalex ::

You can solve this cleanly by using a producer/consumer pattern with a blocking queue.

Let the calculation thread be the "producer" and push finished images into a `BlockingQueue` (e.g. `LinkedBlockingQueue`). Then have a separate slideshow thread (or Swing Timer) act as the "consumer" and take images from the queue at a fixed interval.

If the queue is empty, `take()` will automatically block until a new image arrives, so you don't need manual stop/start logic. If you want to wait until the buffer has e.g. 5 images before starting, you can simply check `queue.size()` first or use a `CountDownLatch` to signal when enough images are available.

Also make sure GUI updates are done on the EDT using `SwingUtilities.invokeLater()` (or use a `SwingWorker`).

This way your calculations can run at variable speed, while the UI slideshow stays smooth and evenly timed.

Zgodovina sprememb…

  • predlagal izbris: predi ()


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

ios swift 1.2

Oddelek: Programiranje
312021 (1427) detroit
»

[Java]Client/Server preko socketa

Oddelek: Programiranje
92512 (2348) KernelPanic
»

[VB] datagridview

Oddelek: Programiranje
352244 (1627) korenje3
»

[Netbeans-Java]Embossing,blurring,sharpening

Oddelek: Programiranje
71450 (1352) t3hn0
»

[C++ DirectX] DirectSound vodič za začetnike

Oddelek: Programiranje
132102 (1888) W3by

Več podobnih tem