Java 我的线程有问题。sleep()
我正在创建一个简单的视频扑克程序,现在我正在处理在用户指定他想要持有的卡后执行的操作,并在抽签后用新卡替换丢弃的卡。我有一个动作,我想一张一张地更换卡,在所有更换之间有一个延迟,但根据下面的代码,它将休眠500毫秒,乘以我必须更换的卡的数量,然后一次更换所有卡,而不是按照我的要求一次更换一张。非常感谢您的帮助Java 我的线程有问题。sleep(),java,multithreading,thread-sleep,Java,Multithreading,Thread Sleep,我正在创建一个简单的视频扑克程序,现在我正在处理在用户指定他想要持有的卡后执行的操作,并在抽签后用新卡替换丢弃的卡。我有一个动作,我想一张一张地更换卡,在所有更换之间有一个延迟,但根据下面的代码,它将休眠500毫秒,乘以我必须更换的卡的数量,然后一次更换所有卡,而不是按照我的要求一次更换一张。非常感谢您的帮助 Action drawAction = new AbstractAction() { public void actionPerformed(ActionEvent e)
Action drawAction = new AbstractAction() {
public void actionPerformed(ActionEvent e) {
int deckPos = 5;
if((holdValFirst.getText()).equals("HELD")){}
else{
holdFirst.setIcon(new ImageIcon(((deck.getDeck())[deckPos]).getCardName()+".gif"));
deckPos++;
try
{
Thread.sleep(500);
}catch (InterruptedException ie){
System.out.println(ie.getMessage());
}
}
if((holdValSecond.getText()).equals("HELD")){}
else{
holdSecond.setIcon(new ImageIcon(((deck.getDeck())[deckPos]).getCardName()+".gif"));
deckPos++;
try
{
Thread.sleep(500);
}catch (InterruptedException ie){
System.out.println(ie.getMessage());
}
}
if((holdValThird.getText()).equals("HELD")){}
else{
holdThird.setIcon(new ImageIcon(((deck.getDeck())[deckPos]).getCardName()+".gif"));
deckPos++;
try
{
Thread.sleep(500);
}catch (InterruptedException ie){
System.out.println(ie.getMessage());
}
}
if((holdValFourth.getText()).equals("HELD")){}
else{
holdFourth.setIcon(new ImageIcon(((deck.getDeck())[deckPos]).getCardName()+".gif"));
deckPos++;
try
{
Thread.sleep(500);
}catch (InterruptedException ie){
System.out.println(ie.getMessage());
}
}
if((holdValFifth.getText()).equals("HELD")){}
else{
holdFifth.setIcon(new ImageIcon(((deck.getDeck())[deckPos]).getCardName()+".gif"));
deckPos++;
}
}
};
当您在事件调度线程EDT中睡眠时,GUI被冻结。每个长时间运行的任务都应该在EDT之外完成,所有的摆动操作都应该在EDT中完成
您应该使用SwingWorker在另一个线程中睡眠,并每500毫秒发布一次进度。或者您可以使用javax.swing.Timer,它将每隔500毫秒触发一个事件。当您在事件调度线程EDT中睡眠时,GUI将被冻结。每个长时间运行的任务都应该在EDT之外完成,所有的摆动操作都应该在EDT中完成
您应该使用SwingWorker在另一个线程中睡眠,并每500毫秒发布一次进度。或者您可以使用javax.swing.Timer,它将每隔500毫秒触发一个事件。代码中存在大量重复。您可能应该为所有ifs的else部分编写一个方法……可能的重复代码中存在大量重复。您可能应该为所有ifs的else部分编写一个方法…可能重复