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 txt : Sélectionner tout - Visualiser dans une fenêtre à part
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 :
Fond :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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); } }
// j'ai viré les get et set pour une meilleure lisibilité
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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); }
Curseur :
Clavier :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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(); } }
Et enfin, la classe chrono d'où provient l'erreur :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 } }
Merci d'avance pour vos réponses.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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) {} } } }
Partager