Ik, een beginnende Java doe-het-zelver, probeer een Java Applet te schrijven waarin in het begin een bal heen en weer stuiterd en na een muisklik moet er een bal bij komen... Nou, 1 bal is geen probleem, maar de tweede krijg ik er niet bij. Ik ben nu zo ver dat 1 bal het gewoon goed doet, maar zodra ik op de muis klik, gaat de bal sneller ipv dat er een bal bij komt.
Ik heb een sterk vermoeden dat dit ligt aan dat elke thread dezelfde repaint() aanvraagt... Maar hoe precies snap ik niet helemaal... Anyone?
Zit al een week op dit vraagstuk te zweten... Hieronder zal ik ff de tot nu toe gemaakte sourcecode plaatsen:
Ik kan trouwens de applet zelf niet online zetten, omdat de compiler een bestand genereerd, waar een $ in staat, dat pikt tripod e.d. niet...
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
45
46
47
48
| import java.awt.*;
import java.awt.event.*;
import java.applet.*;
public class Ball5 extends Applet implements Runnable
{
int x,y,dx,dy,diam,sizex,sizey;
public void init()
{
setBackground(Color.black);
x=y=0; dx=dy=5; diam=20;
sizex=Integer.parseInt(getParameter("WIDTH"));
sizey=Integer.parseInt(getParameter("HEIGHT"));
addMouseListener( new MouseClickHandler() );
(new Thread(Ball5.this)).start();
}
public void run()
{
while (true)
{
try
{
Thread.currentThread().sleep(40);
}
catch (InterruptedException e) {};
x+=dx; y+=dy;
if ((x<=0)||(x+dx+diam>=sizex)) dx=-dx;
if ((y<=0)||(y+dy+diam>=sizey)) dy=-dy;
repaint();
}
}
public void paint(Graphics g)
{
g.setColor(Color.white);
g.fillArc(x,y,diam,diam,0,360);
}
private class MouseClickHandler extends MouseAdapter
{
public void mouseClicked( MouseEvent e )
{
(new Thread(Ball5.this)).start();
}
}
} |
Ik kan trouwens de applet zelf niet online zetten, omdat de compiler een bestand genereerd, waar een $ in staat, dat pikt tripod e.d. niet...