【发布时间】:2012-11-29 04:52:53
【问题描述】:
我有两个带有图像的jlabels..我尝试在单击另一个标签时更改标签中的图像..(例如游戏).. 我有一个问题..当我写 Thread.sleep 图像没有改变..见代码:
public class Game extends JFrame{
private JLabel l1,l2;;
private boolean isClicked = false ,isClicked2 = false;
public Game(){
setLayout(new FlowLayout());
l1 = new JLabel(new ImageIcon(getClass().getResource("image1.png")));
add(l1);
l2 = new JLabel(new ImageIcon(getClass().getResource("image1.png")));
add(l2);
l1.addMouseListener(new MouseListener() {
@Override
public void mouseClicked(MouseEvent e) {}
@Override
public void mousePressed(MouseEvent e) {}
@Override
public void mouseReleased(MouseEvent e) {
if(isClicked2){
l1.setIcon(new ImageIcon(getClass().getResource("image2.png")));
try {
Thread.sleep(1000);
l1.setIcon(new ImageIcon(getClass().getResource("image1.png")));
l2.setIcon(new ImageIcon(getClass().getResource("image1.png")));
isClicked2 = false;
isClicked = false;
}catch(InterruptedException ex){}
}
else{
l1.setIcon(new ImageIcon(getClass().getResource("image2.png")));
isClicked = true;
}
}@Override public void mouseEntered(MouseEvent e){}@Override public void mouseExited(MouseEvent e){}
});
l2.addMouseListener(new MouseListener() {
@Override
public void mouseClicked(MouseEvent e) {}
@Override
public void mousePressed(MouseEvent e) {}
@Override
public void mouseReleased(MouseEvent e) {
if(isClicked){
try {
l2.setIcon(new ImageIcon(getClass().getResource("image2.png")));
Thread.sleep(1000);
l2.setIcon(new ImageIcon(getClass().getResource("image1.png")));
l1.setIcon(new ImageIcon(getClass().getResource("image1.png")));
isClicked = false;
isClicked2 = false;
}catch(InterruptedException ex){}
}
else{
l2.setIcon(new ImageIcon(getClass().getResource("image2.png")));
isClicked2 = true;
}
}@Override public void mouseEntered(MouseEvent e){}@Override public void mouseExited(MouseEvent e){}
});
}
public static void main(String[] args) {
Game g = new Game();
g.setTitle("Fint the same");
g.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
g.pack();
g.setVisible(true);
}
}
运行它并首先单击第一个标签。单击第二个标签后,第一个标签将在 1 秒内更改图像,但 seconf 标签永远不会!!
【问题讨论】:
-
您确实意识到在第一个听众中您有
Thread.Sleep(1000),而在第二个听众中您有Thread.CurrentThread.Sleep(1000),对吗?不知道这是否会有所不同,但这有点吓到我了。 -
Thread.sleep() 是一个静态方法,在 Thread 对象(currentThread)上调用它不会改变任何东西,它会一直在当前线程上休眠。
-
Yes..no .CurrentThread... 但是同样的问题.. koljaTM:我能做什么?
标签: thread-sleep