Pagina 1 di 3 1 2 3 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 24
  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2001
    Messaggi
    14

    [APPLET JAVA] - Refresh di un'immagine

    Ciao a tutti !
    Cercavo di fare qualche esercizio sulle immagini, e ora volevo provare a fare refresh temporizzato dell'immagine caricata. Dopo vari tentativi e ricerche, non sono riuscito nel mio intento. A parte il conteggio di un lasso di tempo che spero di risolvere dopo, devo usare il repaint() ? devo attivare un ciclo ?

    public class immagine extends Applet
    {
    Image imgCorr;
    public void init()
    {
    imgCorr=getImage(getDocumentBase(),"images/immagine.jpg");
    }

    public void paint(Graphics g)
    {
    g.drawImage(imgCorr,0,0,this);
    }
    }

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Sì, devi utilizzare repaint. Però otterrai degli effetti solamente modificando l'immagine da visualizzare.

    Per il conteggio del tempo puoi affidarti al metodo sleep() statico nella classe Thread. Devi catturare, però, un'eventuale eccezione che tale metodo può lanciare: InterruptedException.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  3. #3
    Utente di HTML.it
    Registrato dal
    Sep 2001
    Messaggi
    14
    Ho provato ad aggiungere la sleep e repaint(), ma mi ricarica sempre la stessa immagine anche se nel frattempo l'immagine cambia.
    Cos'è che sbaglio ?

    public class webcam2 extends Applet
    {
    Image imgCorr;
    public void init()
    {
    imgCorr=getImage(getDocumentBase(),"images/webcam.jpg");
    }

    public void paint(Graphics g)
    {
    g.drawImage(imgCorr,0,0,this);
    try
    {
    Thread.sleep(5000);
    }
    catch(InterruptedException e)
    {
    System.out.println(e);
    }
    repaint();
    }
    }

  4. #4
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Nel codice che hai postato non ho visto nessun cambiamento di immagine: imgCorr rimane sempre lo stesso e non viene mai toccato.

    Poi hai inserito un Thread.sleep() all'interno del metodo paint: se tu devi cambiare l'immagine dopo un certo intervallo, questo metodo andrà richiamato fuori, in modo da richiamare il metodo repaint() in due momenti successivi e non all'interno del metodo paint(). Cosa significa chiamare il Thread.sleep() all'interno di paint()? Significa solamente che il lavoro di paint() (che è il metodo che ridisegna il componente) attende 5 secondi (nel tuo caso) per terminare il suo lavoro... inutile, no?


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  5. #5
    Utente di HTML.it
    Registrato dal
    Sep 2001
    Messaggi
    14
    Ok, la prima prova che ho fatto (che mi sembrava logica) è stata la seguente, ma in esecuzione mi scrive applet immagine notinited, poi sono andato a tentativi e l'ultimo era quello che ti ho postato prima xchè mi dava un effetto tipo refresh.
    Ho usato la maniera giusta per modificare l'immagine ? La repaint è nel posto giusto ?
    public class immagine extends Applet
    {
    Image imgCorr;
    public void init()
    {
    imgCorr=getImage(getDocumentBase(),"images/webcam.jpg");
    try
    {
    Thread.sleep(5000);
    }
    catch(InterruptedException e)
    {
    System.out.println(e);
    }
    imgCorr=null;
    repaint();
    imgCorr=getImage(getDocumentBase(),"images/webcam.jpg");
    repaint();
    }

    public void paint(Graphics g)
    {
    g.drawImage(imgCorr,0,0,this);
    }
    }

  6. #6
    Utente di HTML.it
    Registrato dal
    Sep 2001
    Messaggi
    14
    Adesso l'applet parte, non mi da più applet notinited, però il risultato non và bene. Mi sembra che aspetta i 5 secondi prima di farmi vedere un'immagine che poi è solo l'ultima che carica.

  7. #7
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Ho guardato il tuo codice (PS: usa i tag [CODE*][/CODE*] per il codice, così risulta più leggibile). Devi stare attento: se tu poni a null l'oggetto imgCorr non puoi richiamare il metodo repaint(). O meglio, dovresti inserire un controllo all'interno di questo metodo in modo da non disegnare se l'oggetto è null, altrimenti otterrai un bel NullPointerException.

    Mi sembra che tu, nel tuo codice, abbia visualizzato per 2 volte (a distanza di 5 secondi l'una dall'altra) la stessa immagine.

    Poi, sposta il refresh delle immagini all'interno del metodo run() e non nel metodo init(). Quest'ultimo, infatti, serve a inizializzare l'applet ed essa risulterà visibile solamente quando questo metodo termina.

    Concludendo, prova così:
    codice:
    public class immagine extends Applet { 
       Image imgCorr; 
    
       public void init() { 
          imgCorr=getImage(getDocumentBase(),"images/webcam.jpg");
          repaint();
       }
    
       public void run() {
          try { 
             Thread.sleep(5000); 
          } catch(InterruptedException e) { 
             System.out.println(e); 
          } 
          imgCorr=getImage(getDocumentBase(),"images/altraImmagine.jpg"); 
          repaint(); 
       } 
    
       public void paint(Graphics g) { 
          if (imgCorr != null) {
             g.drawImage(imgCorr,0,0,this); 
          }
       }
    }
    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  8. #8
    Utente di HTML.it
    Registrato dal
    Sep 2001
    Messaggi
    14
    Purtroppo non funziona, non capisco. Mi carica la prima immagine e poi non fa nient'altro. Sembra che del metodo run() se ne sbatta. Forse c'è qualcosa che mi sfugge o che ignoro ?

  9. #9
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    Lele! ma run non e' mai raggiunto nel tuo codice. Forse e' per quello che non va... non dovrebbe implementare Runnable?
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  10. #10
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Scusate... ho confuso il metodo dei Thread con quello delle Applet... cambia nome: al posto di run() metti start().


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.