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

    problemi con PaintComponent

    Ciao,
    ho un frame, al suo interno c'è un pannello e un bottone. Praticamente quando viene cliccato il bottone, viene chiamato il metodo cambia(). Il problema è dato dalla paintComponent, infatti se la commento non riscontro errori. Sapete dirmi come posso risolvere questo problema?

    La classe del pannello in questione è questa:
    codice:
    public class InputPanel extends JPanel {
    	private static boolean status=true;
        public Image img;
        public String file="C:\\input.jpg";
        
        public InputPanel(){
            super();
            setBorder(BorderFactory.createLineBorder(Color.black));
        }
        
        public void cambia() throws InterruptedException{
        	Thread t = new Thread(new Esecutore());
            t.start();
            System.out.println("Thread acquisizione avviato");
            
            while(status){
            	img = Toolkit.getDefaultToolkit().createImage(file);
            	Thread.currentThread().sleep(1000);
            	repaint();
            }
        }
        
        public Dimension getPreferredSize() {
            return new Dimension(400,250);
        }
        
        protected void paintComponent(Graphics g) {
            super.paintComponent(g);       
            //g.drawString("Immagine Caricata!",10,20);
            g.drawImage(img,20,20,img.getWidth(this),img.getHeight(this),this);
        }
        
        private static class Esecutore implements Runnable {
            public void run() {
            	int a;
                try {
                    Runtime rt = Runtime.getRuntime();
                                    
                    Process p = rt.exec("C:\\\BioLib-Test.exe");
                    status=true;
                    System.out.println("Acquisizione avviata");
    
                    a=p.waitFor();
                    status=false;
                    System.out.println("Acquisizione terminata. Ritorna:"+a);
                } catch (Exception e) {
                    System.err.println(e);
                }
            }
        }
    }

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320

    Re: problemi con PaintComponent

    Originariamente inviato da gaetano_cont
    Il problema è dato dalla paintComponent, infatti se la commento non riscontro errori.
    E se non la commenti quali errori riscontri?

    Devi fornire tutti i dettagli del problema, se vuoi che qualcuno ti possa dare una mano...


    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
    scusami
    l'errore è questo...

    codice:
    Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
    	at progetto.InputPanel.paintComponent(InputPanel.java:41)
    
    
    riga 41:g.drawImage(img,20,20,img.getWidth(this),img.getHeight(this),this);

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da gaetano_cont
    codice:
    Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
    	at progetto.InputPanel.paintComponent(InputPanel.java:41)
    
    riga 41:g.drawImage(img,20,20,img.getWidth(this),img.getHeight(this),this);
    La questione è semplice: al campo 'img' viene assegnata la immagine dall'interno di cambia(). Il cambia come dici viene invocato a seguito di un altro evento. Questo vuol dire che è possibile (e la eccezione indicata ne è la prova) che in un painting iniziale 'img' sia ancora a null (quindi non puoi fare img.qualcosa() ).

    Banalmente metti almeno un test: se img diverso da null disegna la immagine.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5
    inserendo il controllo l'errore è risolto, però c'è un altro problema...
    nel pannello c'è un immagine che viene ricaricata ogni secondo. L'immagine è l'output dell'applicazione che chiamo in cambia. Nel pannello si deve ricreare una sorta di video

    se nel frame inserisco la chiamata a cambia() dopo aver settato il frame, mi visualizza le immagini anche durante l'esecuzione dell'applicazione. Altrimenti, se utilizzo il bottone per invocare cambia, mi visualizza solo l'ultima immagine salvata, cioè quella salvata prima che l'applicazione termina.

    Così funziona
    codice:
    this.setLayout(new BorderLayout());
    	this.add(PAcquisizione, BorderLayout.CENTER);
    	this.setTitle("applicazione");
    	this.setJMenuBar(menu);
    	this.setVisible(true);
    	this.pack();
    	this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    	try {
    		PAcquisizione.cambia();
    	} catch (InterruptedException e) {
    		e.printStackTrace();
    	}

  6. #6
    nessuno sa aiutarmi?

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.