java在JFrame中使用线程
我有一个包含面板的大型机。我想在这个面板中的线程改变标签图像,只要应用程序正在运行
当我创建实现runnable的面板,然后在大型机中创建该面板的实例时,应用程序进入无限循环。。。我的代码如下:
public mainFrame()
{
BanerPanel baner = new BanerPanel();
baner.run();
}
public class Banner_Panel extends JPanel implements Runnable {
public Banner_Panel() {
initComponents();
imgPath = 2;
imgLbl = new JLabel(new ImageIcon(getClass().getResource("/Photos/banner_4-01.png")));
add(imgLbl);
//run();
}
@Override
public void run() {
while(true)
{
try {
while (true) {
Thread.sleep(3000);
switch(imgPath)
{
case 1:
imgLbl.setIcon(new ImageIcon(getClass().getResource("/Photos/banner_4-01.png")));
imgPath = 2;
break;
case 2:
imgLbl.setIcon(new ImageIcon(getClass().getResource("/Photos/banner_1-01.png")));
imgPath = 3;
break;
case 3:
imgLbl.setIcon(new ImageIcon(getClass().getResource("/Photos/banner_2-01.png")));
imgPath = 4;
break;
case 4:
imgLbl.setIcon(new ImageIcon(getClass().getResource("/Photos/banner_3-01.png")));
imgPath = 1;
break;
}
}
} catch (InterruptedException iex) {}
}
}
# 1 楼答案
JLabel#setIcon(...)
,因为这必须在Swing事件线程或EDT上调用。相反,为什么不干脆给我们一个摆动计时器呢李>ArrayList<ImageIcon>
中,然后在Swing计时器中迭代图标即可李>run()
,而该对象根本不执行任何线程。请阅读threading tutorial以了解如何使用可运行文件和线程(提示您在线程上调用start()
)李>比如说
更多信息,请查看Swing Timer Tutorial