bonjours voila j'ai un probleme dans une application que je cree une table de pingpong avec une interface autour donc au debut j'ai cree les raquette et la balle avec un Graphics tout va bien puis je commence a coder une partit pour faire bouger les raquette du joueur par rapport au coordonner la tout va bien aussi mais quand je crre le code pour faire bouger la balle pour la renvoyer de l'autre coter de la table la probleme l'application ne d'affiche plus

voila une partit du code oui je mes les evennement des raquettes et la balles

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
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
 
 
[....]
final JPanel pane2 = new JPanel(){
 
			private int balle_X = BALLE_X_DEPART;
			private int balle_Y = BALLE_Y_DEPART; 
 
			public void paint(Graphics g) {
				super.paint(g);
 
				//dessine la table verte
				g.setColor(new Color(couleur1, couleur2,couleur3));
				g.fillRect(DISTANCE_BORD_X_TABLE , DISTANCE_BORD_Y_TABLE, LARGEUR_TABLE,HAUTEUR_TABLE );
				//dessine la profondeur de la table
				g.setColor(new Color(couleur4,couleur5,couleur6));
				g.fillRect(DISTANCE_BORD_Y_TABLE_FONCER, DISTANCE_BORD_X_TABLE_FONCER, LONGUEUR_FONCER, LARGEUR_FONCER);
				g.fillRect(DISTANCE_BORD2_Y_TABLE, DISTANCE_BORD2_X_TABLE, LARGEUR_FONCER2, LONGUEUR_FONCER2);
 
 
                                  [...coupeure trop long.........]
 
 
				//Dessine le filet 
				g.setColor(new Color(couleur16, couleur17, couleur18));
				g.drawLine(POINT_LIGNE_HAUT, LIGNE_COMMENCE, POINT_LIGNE_BAS, LONGUEUR_LIGNE);
				g.drawLine(POINT_LIGNE_HAUT2, LIGNE_COMMENCE, POINT_LIGNE_BAS2, LONGUEUR_LIGNE);
				g.drawLine(POINT_LIGNE_HAUT3, LIGNE_COMMENCE, POINT_LIGNE_BAS3, LONGUEUR_LIGNE);
 
				//dessine l'ombre du filet
				g.setColor(new Color(couleur19, couleur20, couleur21));
				g.drawLine(POINT_LIGNE_HAUT4, LIGNE_COMMENCE, POINT_LIGNE_BAS4, LONGUEUR_LIGNE);
 
				//dessine la balle de ping pong
				g.setColor(new Color(couleur22,couleur23 , couleur24 ));
				g.fillOval(balle_X, balle_Y, 10, 10);
 
//				indique les coordoner de la souris  a effacer par la suite
				g.drawString("Y: "+Y+" X: "+X+" i:"+i, 30, 10);
 
				run1();
				if(nouvelle2 == true){
					Graphics2D surface = (Graphics2D) g;
					surface.setPaint(new Color(0, 0, 255, 64));
				      surface.setFont(new Font("SansSerif", Font.ITALIC+Font.BOLD, 30));
				      surface.drawString("Nouvelle Partie", 30, 110);
				      surface.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON);
 
				}
 
				if(pointJoueur >= 21 && texteGagant2 == true){
					texteGagant = true;
				}else if (texteGagant2 == false){
					texteGagant = false;
				}
				if(texteGagant == true && pointJoueur > pointOrdi && pointJoueur-2 >= pointOrdi ){
					Graphics2D surface = (Graphics2D) g;
//					  // tracé du texte en transparence sur l'image
				      surface.setPaint(new Color(0, 0, 255, 64));
				      surface.setFont(new Font("SansSerif", Font.ITALIC+Font.BOLD, 30));
				      surface.drawString("Vous avez gagné", 30, 110);
				      surface.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON);
				      quiterPartie = true;
 
				    repaint();
				}else if (texteGagant == false){
					repaint();
				}
				quitter();
				serviceEnfant();
				run();
			}
 
			public void run(){
				while(true){
					if(balleService){//si la balle est en mouvement
						//Etape1. La balle se deplace t'elle vers la gauche?
						if(déplacementGauche  && balle_X > BALLE_X_MIN){
							rebondPossible = (balle_Y >= departRaquetteOrdi 
									&& balle_Y < (departRaquetteOrdi + 
									departRaquetteOrdi) ? true : false); 
							balle_Y -= deplacmentVertical;
							balle_X -= INCREMENTATION_BALLE;
						}
 
 
					}
				}
			}	
 
 
			public void run1(){
				if(nouvelle == true){
					nouvelle2 = true;
				i++;
				RAQUETTE_ENFANT_Y_DEPART = 95;
				RAQUETTE_ENFANT_Y2 = 226;
				RAQUETTE_ENFANT_Y3 = 226;
 
				if(i == 200){
						nouvelle = false;
					}
 
				}else if(nouvelle == false){
					nouvelle2 = false;
					i = 0;
				}
			}
 
			private void serviceEnfant(){
				int raquetteJoueur = RAQUETTE_ENFANT_Y_DEPART;
				balleService = true;
				balle_X = RAQUETTE_ENFANT_X -5;
				balle_Y = raquetteJoueur +10;
 
				if(service == false && balle_Y > HAUTEUR_TABLE / 2){
					deplacmentVertical = -1;
				}else{
					deplacmentVertical = 1;
				}
 
			}
 
			public void quitter(){
				if(quiterPartie1 == true && quiterPartie == true){
					System.exit(0);
				}else if (quiterPartie1 == false){}
			}};
 
 
 
			pane2.addMouseMotionListener(new MouseAdapter(){
				public void mouseMoved(MouseEvent événement) {
					if(nouvelle == false){
					int souris_Y = événement.getY();
					int souris_X = événement.getX();
					Y = souris_Y;
					X = souris_X;
 
					//actionne la raquette principale du joueur
					if(souris_Y < RAQUETTE_ENFANT_Y_DEPART +15  && RAQUETTE_ENFANT_Y_DEPART + blocageRaquette33  > HAUT_TABLE +15 ){
						RAQUETTE_ENFANT_Y_DEPART -= 4;
						pane2.repaint();
					}else if (souris_Y > RAQUETTE_ENFANT_Y_DEPART   
                                            [.....coupure du code tros long....]
 
 
						pane2.repaint();
					}else if(souris_X > RAQUETTE_ENFANT_Y3 +15 && RAQUETTE_ENFANT_Y3 + blocageRaquette44 < LARGEUR_TABLE -6 && souris_Y < LIGNE2_COMMENCE){
						RAQUETTE_ENFANT_Y3 += 3;
						pane2.repaint();
					}}}});
 
[...]


et j'ai appris lors de mon tuto que l'ordinateur ne pouviat pas effectuer deux tache en meme temps donc on ma dit de mettre ce code

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
 
 
public void actionPerformed(ActionEvent evt){
		//cree un fil et execute le code "tuer le temps"
		//sans bloquer la fenetre.
		Thread travailleur = new Thread(this);
		travailleur.start();//Ceci appelle la methode run()
	}
	public void run(){...}
donc je pense que ce code suffirait pour faire marcher les 2 taches en meme temps mais je voudrias savoir ou doje le placer pour qu il marche et est ce que le code c'est bine celui ou il ya t i ldes modification a faire sur celui ci??

meric d'avance