Visualizzazione dei risultati da 1 a 10 su 10
  1. #1

    [JAVA SWING]Metodo per caricare immagine velocemente

    Il mio programma "simula" un banale antifurto ( sensore + tastiera e 1 lucina rossa e una verde ).
    Quando passo sopra il sensore con il mouse la lucina rossa si deve accendere, scattare una 50ina di foto e inviarle per email.
    Il programma in sè funziona ma la luce rossa non si accende come prima cosa, si accende solo una volta completato l'invio dell'email.
    L'immagine della luce la carico dentro una label con il setImageIcon.
    Vorrei sapere se c'è un modo per caricare/ricaricare la foto prima di inviare l'email..

  2. #2
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802
    Senza vedere il codice non si può dire molto... Hai usato i thread per caso?
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

  3. #3
    codice:
    private void pnlsensoreMouseEntered(java.awt.event.MouseEvent evt) {                                        
            if(onof==true && tastiera.lblPassword.getText().equals("PASSWORD CORRETTA!")==true && firstTime == true)
            {
                lucine.lblRossoSpento.setIcon(new ImageIcon("."+File.separatorChar+"src"+File.separatorChar+"img"+File.separatorChar+"RossoAcceso.png"));
                firstTime = false;
                Date data = new Date();
                if(j == 0){
                    j = 50;
                }
                for(int i = j; i >= 0; i--){
                    BufferedImage image = webcam.getImage();
                    try {
                        ImageIO.write(image, "PNG", new File("."+File.separatorChar+"allarmi"+File.separatorChar+data.getDate()+"-"+(data.getMonth()+1)+"-"+(data.getYear()-100)+File.separatorChar+"Intruso"+i+".png"));
                        if(i == 0)
                        {
                            setJ();
                            invioMail.send();
                        }
                    } catch (IOException ex) {
                        Logger.getLogger(CircuitoC.class.getName()).log(Level.SEVERE, null, ex);
                    }
                }
                
            }
        }

    Questa è la funzione dove accendo la lucina rossa.
    setJ() è per non far sovrascrivere le immagini..
    Ultima modifica di LeleFT; 24-03-2014 a 12:43 Motivo: Inseriti tag CODE

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da DonDony Visualizza il messaggio
    Il programma in sè funziona ma la luce rossa non si accende come prima cosa, si accende solo una volta completato l'invio dell'email.
    Stai tenendo "impegnato" il EDT (Event Dispatch Thread). Swing non è thread-safe, tutto quanto (paint, gestione eventi, ecc...) viene fatto nel contesto di un unico thread che è appunto chiamato convenzionalmente EDT. E se lo tieni impegnato tu ......

    -> Concurrency in Swing
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5
    Ci darò un'occhiata!

  6. #6
    Grazie Mille!
    Ho usato un SwingUtilities.invokeLater e adesso fa quello che deve fare !!
    Grazie ancora!

  7. #7
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da DonDony Visualizza il messaggio
    Ho usato un SwingUtilities.invokeLater e adesso fa quello che deve fare !!
    Onestamente non ho proprio idea di come/dove hai usato invokeLater ..... il punto è che invokeLater fa eseguire "qualcosa" nel contesto del EDT ma in un momento successivo, appena possibile. Mentre tutto quel tuo ciclo di scritture e invio email andrebbe fatto non nel EDT.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  8. #8
    Alla fine poi, non è che ho capito bene bene il funzionamento di tal cosa, sono andato a tentativi fin quando non mi ha caricato per prima cosa la lucina e poi mandato l'email!

    codice:
    private void pnlsensoreMouseEntered(java.awt.event.MouseEvent evt) {                                        
            if(onof==true && tastiera.lblPassword.getText().equals("PASSWORD CORRETTA!")==true && firstTime == true)
            {
                lucine.lblRossoSpento.setIcon(new ImageIcon("."+File.separatorChar+"src"+File.separatorChar+"img"+File.separatorChar+"RossoAcceso.png"));
                firstTime = false;
                SwingUtilities.invokeLater(new Runnable() {
                    @Override
                    public void run() {
                        Date data = new Date();
                        for(int i = j; i > j-50; i--){
                            BufferedImage image = webcam.getImage();
                            try {
                                ImageIO.write(image, "PNG", new File("."+File.separatorChar+"allarmi"+File.separatorChar+data.getDate()+"-"+(data.getMonth()+1)+"-"+(data.getYear()-100)+File.separatorChar+"Intruso"+i+".png"));
                            } catch (IOException ex) {
                                Logger.getLogger(CircuitoC.class.getName()).log(Level.SEVERE, null, ex);
                            }
                        }
                        invioMail.send();
                    }
                });
            }
        }

    Questo è il codice di adesso..
    Ultima modifica di LeleFT; 24-03-2014 a 12:43 Motivo: Inseriti tag CODE

  9. #9
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    @DonDony: quando posti del codice, inseriscilo all'interno degli appositi tag CODE, altrimenti perde formattazione ed indentazione, diventando di difficile lettura.

    [CODE]
    codice
    [/CODE]


    In alternativa, entra in "Modalità Avanzata" e usa l'apposito pulsante "#".


    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

  10. #10
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da DonDony Visualizza il messaggio
    Alla fine poi, non è che ho capito bene bene il funzionamento di tal cosa, sono andato a tentativi fin quando non mi ha caricato per prima cosa la lucina e poi mandato l'email!
    Adesso l'unica cosa di diverso è che pnlsensoreMouseEntered completa praticamente immediatamente. Imposti la immagine RossoAcceso.png e poi invokeLater va a "parcheggiare" il Runnable nella coda degli eventi (il run() non viene eseguito subito!), quindi pnlsensoreMouseEntered termina subito e il controllo viene restituito al framework, che tra le prime cose che fa sicuramente va ad aggiornare la label della icona a video. Quindi solo in un secondo momento leggermente più avanti, viene eseguito il run() del tuo Runnable. Ma qui sta di fatto che tieni comunque "impegnato" il EDT per un tempo potenzialmente lungo. Ed è questo che, ti ripeto ancora una volta, non andrebbe bene (nulla di grave in sé ma la tua interfaccia utente è "congelata" in questo frangente di tempo).

    Per risolvere dovresti usare un thread apposito (con tutte le attenzioni che questo comporta).
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

Tag per questa discussione

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.