Null pointer Exception sur getGraphics()
mon application ressemble à ça, je suis une exception de pointeur null à la méthode draw (), pour être exact, à g de la.drawImage(img, 0, 0, null)
package com.ochs.game;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class Game extends JPanel implements Runnable{
private static final long serialVersionUID = 8229934361462702491L;
public static final int WIDTH = 320;
public static final int HEIGHT = 240;
public static final int SCALE = 2;
public boolean isRunning;
private BufferedImage img;
private Graphics2D g2d;
public Game() {
setFocusable(true);
requestFocus();
start();
}
public void start() {
isRunning = true;
new Thread(this).start();
}
public void stop() {
isRunning = false;
}
public void run() {
long start;
init();
while(isRunning) {
start = System.currentTimeMillis();
update();
render();
draw();
try {
Thread.sleep(5 - (System.currentTimeMillis() - start));
} catch (Exception e) {
}
}
}
public void init() {
img = new BufferedImage(WIDTH*SCALE, HEIGHT*SCALE, BufferedImage.TYPE_INT_RGB);
g2d = (Graphics2D) img.getGraphics();
}
public void update() {
}
public void render() {
}
public void draw() {
Graphics g = getGraphics();
g.drawImage(img, 0, 0, null); //<<<<< getting null pointer here!
}
public static void main(String[] args) {
Dimension size = new Dimension(WIDTH*SCALE, HEIGHT*SCALE);
Game gameComponent = new Game();
JFrame frame = new JFrame();
frame.setVisible(true);
frame.setSize(size);
frame.setLocationRelativeTo(null);
frame.setResizable(false);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(gameComponent);
}
}
Maintenant, ma question est: pourquoi ai-je une exception de pointeur null lorsque l'on essaie de tirer le bufferedimage appelé img? J'ai aussi essayé juste à la sortie d'une chaîne de caractères en utilisant cordon de serrage() mais cela donne juste moi-même une exception nullpointerexception, trop.
est-ce quelqu'un a un conseil?
Que diriez-y compris l'exception? Ce qui est nul?
Je suppose que votre objet graphique est nulle puisque vous commencez à dessiner l'image (à partir de ce thread a commencé dans le constructeur) avant d'ajouter la composante du cadre.
g
? img
?Je suppose que votre objet graphique est nulle puisque vous commencez à dessiner l'image (à partir de ce thread a commencé dans le constructeur) avant d'ajouter la composante du cadre.
OriginalL'auteur user2410644 | 2013-08-11
Vous devez vous connecter pour publier un commentaire.
Vous êtes probablement en essayant d'obtenir le contexte Graphique via
getGraphics()
avant le Composite a été rendue, et ainsi, la méthode renvoie null. Ne pas le faire. Il y a des problèmes avec l'aide degetGraphics()
sur un composant pour obtenir le contexte Graphique, dont l'un est le problème que vous voyez ci-dessus, et une autre est que le contexte Graphique obtenu ne persistera pas. Il ya des occasions où cela est nécessaire, mais le plus souvent nous n'passive dessin viapaintComponent(...)
. Souvent un Swing Timer peut être utilisé pour la boucle d'animation.OriginalL'auteur Hovercraft Full Of Eels
Je pense que c'est parce que vous essayez de dessiner à l'aide de getGraphics() à la place du classique remplacement de paintComponent. Vous voulez utiliser quelque chose comme ceci: drawImage n'est pas de dessin (voir le haut de réponse).
OriginalL'auteur Jlewis071
getGraphics() la méthode renvoie null si le Composant n'est pas rendu jusqu'à cette déclaration, et ainsi vous aurez NullPointerException, même si cela est rendu Graphique ne sera pas stable et mieux utiliser un paintComponents...
Voir lien.
Aussi un Exemple "La meilleure approche que les getGraphics()"
OriginalL'auteur Sukhbir
le Composant doit d'abord être visible
essayez ceci avant de commencer le fil dans le Jeu/panneau
cadre.add(panneau)
cadre.setVisible(true)
puis démarrer le thread Jeu/panneau
OriginalL'auteur Vasilis