- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在java中有这段代码
private void buttonShowImageActionPerformed(java.awt.event.ActionEvent evt)
{
if(folderFiles != null)
{
for(int i=0; i<folderFiles.size(); i++)
{
icon = new ImageIcon(folderFiles.get(i));
labelImage.setIcon(icon);
timeDelay(2); // A method that delays 2 secs - it works
}
}
}
当我按下按钮时,它会等待一段时间,从第一个图像转到最后一个图像,并逐个跳过文件夹中的图像延迟方法有效(我测试过)提前致谢!
最佳答案
关于:
timeDelay(2); // A method that delays 2 secs - it works
不,无论您如何测试它,它都不起作用。 Swing 不是这样工作的,您最好避免做出这样的假设。使用 Swing 计时器。
你会问,我怎么知道它不起作用,我会告诉你:该代码不会调用后台线程,也不会启动 Swing Timer,所以它唯一能做的就是延迟当前线程,可能在 Thread.sleep(...)
的某个地方。如果你调用这个并“测试”这个,是的,它会导致延迟,并显示在你的 System.out.println(...)
中。语句到控制台,但它也会 sleep Swing 事件线程,并使您的应用程序进入休眠状态。所以你真的不想这样做。
事实上,查看这是否适用于 Swing 的最佳测试是您当前的代码。然后会发生什么?您声明:
When I push the button, it waits some time, and from the 1st goes to the last image, and skips the images from the folder one-by-one
因此,事实上您知道这样一个事实:您的延迟对于 Swing 不起作用,因为您描述了代码践踏 Swing 事件线程、使其崩溃的典型症状。再次强调,使用 Swing Timer。这是 link to the Swing Timer Tutorial .
如果这是我的代码,我不会在每次按下按钮时都读取图像,而是一次读取所有图像,并且只读取一次,然后将它们放入 ArrayList<ImageIcon>
中。说叫iconList。假设您这样做了,那么代码可能如下所示:
private void buttonShowImageActionPerformed(java.awt.event.ActionEvent evt) {
// !! I'd use a variable or constant instead of the magic number 2000
new Timer(2000, new ActionListener() {
int count = 0;
actionPerformed(ActionEvent e) {
if (count != iconList.size()) {
labelImage.setIcon(iconList.get(count));
count++;
} else {
// stop the Timer
((Timer) e.getSource()).stop();
}
}
}).start();
}
<小时/>
编辑
你问:
My friend one last question ..... I put the "int count = 0;" inside the actionPerformed and nothing happend ... I cannot understand why it works only if it is outside the method .... ?
请理解 Swing Timer 的工作方式是重复调用 actionPerformed 方法,这里每 2000 秒调用一次。我的代码所做的是,当计时器启动时,计数设置为0。每次调用actionPerformed方法,计数增加1,并显示下一个ImageIcon。
在您的代码中,当调用 actionPerformed 方法时,计数将重新设置为 0,显示第一个图像,然后计数递增。但每次调用 actionPerformed 方法时,您的代码都会将计数重置回 0,因此增量不起作用。
关于Java-Swing : The ImageIcon cannot change in runtime?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24921863/
我是一名优秀的程序员,十分优秀!