PDA

Visualizza la versione completa : [JAVA] che vuol dire displayable


Gil Mour
27-08-2004, 05:02
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?

kateetak
27-08-2004, 09:59
Significa che il tuo componente non visualizzabile.
Di che componente si tratta?
:ciauz:

Gil Mour
27-08-2004, 13:20
ma un JPanel :dott:

visualizzato sullo schermo quando mi da questa eccezione..che vuol dire

anx721
27-08-2004, 14:01
posta il codice

Gil Mour
27-08-2004, 15:27
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();
}
}

}


alla costante STRUMENTO_PENNELLO potete sostituire 1, se pensate di compilare la classe. Il problema si presenta nella classe privata GestoreDisegni

anx721
27-08-2004, 17:10
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...

unomichisiada
28-08-2004, 03:39
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);
}
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.
Comunque mi associo al consiglio di postare l'intero codice eseguibile altrimenti riesce difficile aituarti

unomichisiada
28-08-2004, 03:41
eccezione vuole una sola zeta vabbe' scu :jam: sate

Gil Mour
28-08-2004, 14:04
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

unomichisiada
28-08-2004, 14:08
Ok

Loading