Problème avec la méthode repaint()
Chose promise, chose due... me revoilà (rapidement) avec une nouvelle question.
Déjà j'ai recodé entièrement mon projet pour que ça soit plus propre. Voilà le topic traitant de mon précédent problème : https://www.developpez.net/forums/d1...enetre-jframe/
Maintenant que j'ai réglé ces soucis d'affichage, le problème est le suivant. Ma méthode repaint m'envoie l'erreur suivante :
Code:
1 2 3
| Exception in thread "Thread-1" java.lang.NullPointerException
at jeux2.Chrono.run(Chrono.java:8)
at java.lang.Thread.run(Unknown Source) |
Voici les différentes classes :
Main :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| package jeux2;
import javax.swing.JFrame;
import java.awt.Dimension;
public class Main {
public static Fond fond;
public static void main(String[] args){
JFrame fenetre = new JFrame("Test");
fenetre.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
fenetre.setSize(new Dimension(1920, 1200));
fenetre.setLocationRelativeTo(null);
fenetre.setResizable(false);
fenetre.setAlwaysOnTop(false);
fenetre.setUndecorated(true);
Fond fond = new Fond();
fenetre.setContentPane(fond);
fenetre.setVisible(true);
}
} |
Fond :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44
| package jeux2;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Image;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.swing.JPanel;
public class Fond extends JPanel {
private static final long serialVersionUID = 2290215993065771323L;
public int x = 0;
public int y = 0;
public int dx = 0 ;
public int dy = 0;
public Image fond;
public Image curseur;
public Fond(){
super();
this.dx = 0;
this.addKeyListener(new clavier());
try{
this.fond = ImageIO.read(new File("C:/Users/Askiarsh/Desktop/eclipse/jeux2/src/jeux2/img/earth_map_ocean_continents_1920x1200.jpg"));
this.curseur = ImageIO.read(new File("C:/Users/Askiarsh/Desktop/eclipse/jeux2/src/jeux2/img/test.png"));
}catch(IOException e){
System.out.println("exception");
}
Thread chrono = new Thread(new Chrono());
chrono.start();
}
public void paintComponent(Graphics g){
super.paintComponent(g);
Graphics g2 = (Graphics2D)g;
g2.drawImage(this.fond,0,0,null);
g2.drawImage(this.curseur,100,100,null);
} |
// j'ai viré les get et set pour une meilleure lisibilité
Curseur :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
| package jeux2;
import java.awt.Graphics;
import java.awt.Image;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.swing.JComponent;
public class Curseur extends JComponent{
private static final long serialVersionUID = 8868691716373117721L;
public int x = 0;
public int y = 0;
public int dx = 0 ;
public int dy = 0;
public void paintComponent(Graphics g){
try {
Image img = ImageIO.read(new File("C:/Users/Askiarsh/Desktop/eclipse/jeux2/src/jeux2/img/test.png"));
this.deplacement();
g.drawImage(img, x, y, this);
} catch (IOException e) {
e.printStackTrace();
}
} |
Clavier :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
| package jeux2;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
public class clavier implements KeyListener{
@Override
public void keyPressed(KeyEvent e) {
if(e.getKeyCode() == KeyEvent.VK_Z){
Main.fond.setDx(1);
};
if(e.getKeyCode() == KeyEvent.VK_S) ;
if(e.getKeyCode() == KeyEvent.VK_Q) ;
if(e.getKeyCode() == KeyEvent.VK_D) ;
}
@Override
public void keyReleased(KeyEvent arg0) {
// TODO Auto-generated method stub
}
@Override
public void keyTyped(KeyEvent arg0) {
// TODO Auto-generated method stub
}
} |
Et enfin, la classe chrono d'où provient l'erreur :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| package jeux2;
public class Chrono implements Runnable{
private int PAUSE = 3;
@Override
public void run() {
while(true){
Main.fond.repaint();
System.out.println("test");
try {
Thread.sleep(PAUSE);
} catch (InterruptedException e) {}
}
}
} |
Merci d'avance pour vos réponses.