Mat*_*tin 3 java user-interface swing multithreading
此代码包含可移动的pacman,按下空格按钮后射出小椭圆.所以布尔变量默认为false.按空格键后变为真,并绘制椭圆.按空格键后,也会启动新线程.此线程包含将椭圆向前移动的代码,一旦它到达某些坐标,它就消失了.所以当我第一次按空格时,一切正常.实际上它也可以工作多次,但是elclipse不断抛出IllegalThreadStateException.我决定把线程代码放到while(c!=22)块中,因为当c = 21时球消失,所以我认为线程会继续运行,因为条件不能满足.所以我的观点是每按一次按钮就让椭圆移动.这不是完整的代码.只是重要的一部分.如果你需要整个代码,请告诉我.谢谢!!
线:
thread=new Thread(){
public void run(){
while(c!=22){
try{
for (c=0;c<=20;c++){
newX=newX+c;
repaint=true;
Thread.sleep(100);
}
if(c==21){
shoot=false;
c=0;
}
}catch(InterruptedException v){System.out.println(v);}
}
}
};
Run Code Online (Sandbox Code Playgroud)
paintComponent方法:
public void paintComponent(Graphics g){
super.paintComponent(g);
i=new ImageIcon("C:\\Users\\Jakub\\Desktop\\pm.gif");
pacman=i.getImage();
g.drawImage(pacman,x,y,this);
if(!shoot)
newX=x+20;
newY=y+10;
if(shoot){
g.drawOval(newX,newY,10,10);
}
if(repaint)
repaint();
}
Run Code Online (Sandbox Code Playgroud)
启动线程的关键事件:
if(e.getKeyCode()==KeyEvent.VK_SPACE){
shoot=true;
thread.start();
}
Run Code Online (Sandbox Code Playgroud)
IllegalThreadStateException可能会抛出因为您Thread.start()为同一个线程对象多次调用.避免此异常的关键是thread每次启动它之前进行实例化(确切的实现取决于您想要实现的行为).
| 归档时间: |
|
| 查看次数: |
112 次 |
| 最近记录: |