我正在为我的测试做一些工作,我觉得睡眠不起作用,你必须从组合100毫秒300毫秒500毫秒1000毫秒中选择。但是,当我开始程序,他们这样做它看起来相同也许我犯了一些错误。 提前致谢。 这是我的代码:
package vjezbanje;
import java.util.Random;
import javax.swing.ImageIcon;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
public class Move extends Thread {
JComboBox cb = new JComboBox();
JLabel lb = new JLabel();
JPanel pl = new JPanel();
ImageIcon ic;
private String[] brzine = {"100ms","300ms","500ms","1000ms"};
public JComboBox getCb() {
return cb;
}
public void setCb(JComboBox cb) {
this.cb = cb;
}
public JLabel getLb() {
return lb;
}
public void setLb(JLabel lb) {
this.lb = lb;
}
public JPanel getPl() {
return pl;
}
public void setPl(JPanel pl) {
this.pl = pl;
}
public Move() {
}
public void run() {
pl.add(lb);
cb = new JComboBox(brzine);
for(int t=0; t<10; t++) {
if(cb.getSelectedItem().equals("100ms")) {
try {
Random r = new Random ();
int s = r.nextInt(6)+1;
// 0 1 2 3 4 5
lb.setIcon(new ImageIcon("slike\\"+s+".jpg"));
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
if(cb.getSelectedItem().equals("300ms")) {
try {
Random r = new Random ();
int s = r.nextInt(6)+1;
// 0 1 2 3 4 5
lb.setIcon(new ImageIcon("slike\\"+s+".jpg"));
Thread.sleep(300);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
if(cb.getSelectedItem().equals("500ms")) {
try {
Random r = new Random ();
int s = r.nextInt(6)+1;
// 0 1 2 3 4 5
lb.setIcon(new ImageIcon("slike\\"+s+".jpg"));
Thread.sleep(500);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
if(cb.getSelectedItem().toString().equals("1000ms")) {
try {
Random r = new Random ();
int s = r.nextInt(6)+1;
// 0 1 2 3 4 5
lb.setIcon(new ImageIcon("slike\\"+s+".jpg"));
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
答案 0 :(得分:1)
同意格雷,这应该是一个带睡眠时间变量的块。 但是,我认为你所问的是“为什么我看不到我的图像在不同的时间发生变化?”。您可能会看到的只是一段不同时间的“挂起”。那是因为你正在对GUI线程进行所有更新,包括睡眠,因此在整个方法返回之前没有任何实际更新。
在后台会有各种更新方式。我可能会推荐某种允许进度更新的后台工作者。使用进度更新来更改图像,并使用worker方法进行休眠。