come da topic
chiamo Component.getGraphics() e mi ritorna una NullPointerException, la documentazione dice che questo accade quando il componente non è displayable
che vuol dire, e come risolvo il problema?
come da topic
chiamo Component.getGraphics() e mi ritorna una NullPointerException, la documentazione dice che questo accade quando il componente non è displayable
che vuol dire, e come risolvo il problema?
Significa che il tuo componente non è visualizzabile.
Di che componente si tratta?
![]()
..::200 post il 1 settembre 2004::..
..::100 13/07/2004::..
..): Web Site (pazienza però)..
VASCO castiga chi non lecca la FIGA
ma è un JPanel
è visualizzato sullo schermo quando mi da questa eccezione..che vuol dire
alla costante STRUMENTO_PENNELLO potete sostituire 1, se pensate di compilare la classe. Il problema si presenta nella classe privata GestoreDisegnicodice:public class Lavagna extends Canvas { private int width; private int height; private int sideWidth; private Image sfondo; private boolean sfondoCaricato; private boolean disegna; private int strumentoSelezionato; private int start_x; private int start_y; private int x; private int y; public Lavagna(int height, int width, int sideWidth) { this.width = width; this.height = height; this.sideWidth = sideWidth; disegna = false; sfondoCaricato = false; sfondo = null; setLocation(sideWidth,0); setSize(width-sideWidth,height/2); setBackground(Color.white); GestoreDisegni gestoreDisegni = new GestoreDisegni(this); addMouseListener(gestoreDisegni); addMouseMotionListener(gestoreDisegni); } public void paint (Graphics g) { if (sfondo!=null) { g.drawImage(sfondo,0,0,width,height,this); } else { super.paint(g); if (disegna) { switch (strumentoSelezionato) { case LavagnaPanel.STRUMENTO_PENNELLO: g.drawLine(start_x,start_y,x,y); } } } } public void setSfondo(Image sfondo) { this.sfondo = sfondo; } public void setDisegna (boolean disegna) {this.disegna = disegna;} public void setStrumento (int strumento) { strumentoSelezionato = strumento; } public void setStartX (int x) {start_x = x;} public void setStartY (int y) {start_y = y;} public void setX (int x) {this.x = x;} public void setY (int y) {this.y = y;} // * * * * * * * * * * * * * * * * * * * * * * * * * * private class GestoreDisegni implements MouseListener,MouseMotionListener { private boolean disegna; private Lavagna lavagna; private Graphics g; private int start_x; private int start_y; public GestoreDisegni (Lavagna l) { lavagna = l; g = lavagna.getGraphics(); disegna = false; //DEBUG System.out.println(g==null); } public void mouseClicked(MouseEvent e) { } public void mousePressed(MouseEvent e) { if (e.getButton()==1) { lavagna.setDisegna(true); lavagna.setStartX(e.getX()); lavagna.setStartY(e.getY()); } } public void mouseReleased(MouseEvent e) { lavagna.setDisegna(false); } public void mouseMoved(MouseEvent e) { } public void mouseEntered(MouseEvent e) { } public void mouseExited(MouseEvent e) { } public void mouseDragged(MouseEvent e){ lavagna.setX(e.getX()); lavagna.setY(e.getY()); lavagna.repaint(); } } }
1 - posta il codice completo eseguibile (ho creato un frame e ci ho aggiunto una lavagna ma non si vede nulla).
2 - passa a swing...
E' da un po che non programmo in java ma se non ricordo male ogni oggetto di tipo non primitivo va espicitamente istanziato con new,cosa che tu quì non fai con il membro privato lavagna,al momento incui invochi lavagna.getGraphics(); quindi lavagna è un riferimento null e da quì l'eccezzione che ti solleva.fammi sapere se è quello l'errore.codice:private boolean disegna; private Lavagna lavagna; private Graphics g; private int start_x; private int start_y; public GestoreDisegni (Lavagna l) { lavagna = l; g = lavagna.getGraphics(); disegna = false; //DEBUG System.out.println(g==null); }
Comunque mi associo al consiglio di postare l'intero codice eseguibile altrimenti riesce difficile aituarti
Il centro dell'attenzione non è sempre un buon posto in cui trovarsi
Mai discutere con uno stupido, la gente potrebbe non capire la differenza. (O. W.)
eccezione vuole una sola zeta vabbe' scusate
Il centro dell'attenzione non è sempre un buon posto in cui trovarsi
Mai discutere con uno stupido, la gente potrebbe non capire la differenza. (O. W.)
non dovrebbe essere quello il problema, non è la lavagna ad essere null ma è l'oggetto graphics
comunque,siccome questa parte di applicazione è gestita da 5 o 6 classi sto cercando di creare un eseguibile ad hoc che simula il funzionamento di tutta l'app
appena ho fatto lo posto
Ok
Il centro dell'attenzione non è sempre un buon posto in cui trovarsi
Mai discutere con uno stupido, la gente potrebbe non capire la differenza. (O. W.)