Opóźnienie wyświetlania obrazka

0

Cześć, niestety to znowu ja...

  1. Chcę zrobić pokaz slajdów tj. obrazki w programie mają się zmieniać co jakiś czas np. 1sek, sprawdzałem i program działa ale nie działa tj. opóźnienie działa ale nie zmienia się wyświetlany obrazek.
    class OpoznieniePokazuSlajdow{
        void opoznijRysowanie(){
            try {
                    Thread.sleep(1000);
                    
                } catch (InterruptedException ie) {
                    Logger.getLogger(PrzegladarkaZdjec.class.getName()).log(Level.SEVERE, null, ie);
                }
        }
    }
    private void buttonPokazSlajdowActionPerformed(java.awt.event.ActionEvent evt) {                                                   
        try{
            OpoznieniePokazuSlajdow pokaz = new OpoznieniePokazuSlajdow();
            while(true){//pętla działa w nieskończoność i tak póki co musi zostać
               pokaz.opoznijRysowanie();
                y++;//wskazuje na komórkę listy "obrazki"
                if(y==obrazki.size())
                   y=0;
                File filePokazSlajdow = new File(obrazki.get(y).toString());//obrazki to lista z obrazkami
                BufferedImage bi = ImageIO.read(filePokazSlajdow);
                ImageIcon imgIcon = new ImageIcon(bi);
                labelZdj.setIcon(imgIcon);  
            }
        } catch (IOException ex) {
            
        }
    }

Pozdrawiam

0

Nie tak się to robi, zamiast usypiania wątku wykorzystaj Timer, który wykonuje pewien kod co sekundę. Kod, to odczytanie kolejnego obrazka, podpięcie go do JLabel i repaint.

0

Ok więc wykorzystałem timer z tego przykładu - Klasa Timer tylko, że sprawdzając działanie (wstawiłem repaint() ale jak to ja musiałem wywalić i sprawdzić czy bez tego działa program żeby zrozumieć i zapamiętać) i okazało się, że działa tak jak powinien :) dlaczego tak się dzieje?
Mam takie coś czyli jeśli jest 100 obrazków to z całym pokazem wyszłoby 500 sekund czyli 5 sekund na jedno zdjęcie, tak?

timer1.schedule (timer1_task, start, (obrazki.size()-1)*5000);
0

Nie, jak chcesz mieć 5 sekund na zdjęcie, to

timer1.schedule (timer1_task, start, 5000);

1 użytkowników online, w tym zalogowanych: 0, gości: 1