当前位置:编程学习 > JAVA >>

JAVA线程相关知识!向大牛们求解?

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;


public class Test {
private JFrame jframe;
private JButton command1;
private JButton command2;
private Boolean flag;
private int x;
public Test()
{
jframe=new JFrame("my test");
jframe.setLayout(null);
command1=new JButton("A");
command2=new JButton("Test");
jframe.setBounds(300,200, 400, 300);
command1.setBounds(60,30, 60, 20);
command2.setBounds(280, 30, 60,20);
jframe.add(command1);
jframe.add(command2);
flag=true;
x=command1.getX();
jframe.setVisible(true);
command2.addActionListener(new ActionListener() {

@Override
public void actionPerformed(ActionEvent arg0) {
// TODO Auto-generated method stub

//代码段1
/*
new Thread(){
@Override
public void run() {
while(flag)
{
command1.setBounds(x,30,60,20);
x+=5;
try {
Thread.sleep(800);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
if(x>=300)
{
flag=false;
break;
}
}
}
}.start();
*/

//代码段1结束


//代码段2

while(flag)
{
command1.setBounds(x,30,60,20);
x+=5;
try {
Thread.sleep(50);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
if(x>=300)
{
flag=false;
break;
}
}

//代码段2结束
}
});
}
public static void main(String[] args)
{
new Test();
}
}


关于上面的程序一直纠结中。如果用线程(代码段1)可以很好的表示按钮A移动,而用代码段2的代码按钮A和按钮Test前段时间僵死不动,停一段时间按钮A突然移动到右边。我一直就纳闷?为什么出现这种情况。按照代码段2的设想也应该跟用线程的效果一样呀!遇到这种情况太多了!那位大牛解释一下呀?菜鸟学习中!另外在加个问题:什么时候要使用多线程,比如J2ME游戏编程中的画布刷新等?越详细越好!拜托了! --------------------编程问答-------------------- Thread.sleep(50);休眠的时间太短了,所以会感觉突然移到右边 --------------------编程问答-------------------- 上楼谢谢你回复呀!可是不对呀!不是那个原因!上面的程序可以直接运行!你可以尝试一下!你可以把代码段2的注释,把代码段1的取消注释,再启动Test按钮,效果肯定不一样!为什么出现这种情况?很希望有人交流,也一直求解中!急!急!急 --------------------编程问答-------------------- swing一直是偶的弱项,顶起,大牛吧,赶紧出现吧.. --------------------编程问答-------------------- 代码1建立了一个新线程,当新线程修改属性后,主线程可以刷新显示。而线程2只有一个线程,就一直忙着你while循环里面的内容,而且由于button1的action一直相应不完,所以不能刷新显示,只有action完了才能刷新显示。 --------------------编程问答-------------------- 首先感谢大家!我是"两线作战"呀!这是另一个论坛解释的网址:
http://topic.csdn.net/u/20110906/10/27bb14c8-f654-4b36-bccd-e8fce4ccb7f4.html?26230
看看那个更有说服力!学习嘛!哈哈!
补充:Java ,  Java EE
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,