2012-08-05 87 views
0

我想用间隔时间100毫秒显示一些图像,但是当我将它们显示在屏幕上时,它们中的一些是可见的,有些不是(随机顺序)。 这里是我的代码部分:以100毫秒的间隔在java中显示图像

panel = new ShowImage(Integer.toString(ImageRand+1),kind); // show random images 
//panel.setIgnoreRepaint(false); 
frame.getContentPane().add(panel); 
frame.validate(); 
while(panel.isShowing()!=true); 
panel.setVisible(true); 
start=System.currentTimeMillis(); 
while(System.currentTimeMillis()-start < 100); 

即使我已经使用nanoTime()函数,但它不能正常工作

编辑:

之前,我添加此两行:

while(panel.isShowing()!= true);

panel.setVisible(true); 

我的代码看起来是这样的:

面板=新ShowImage(Integer.toString(ImageRand + 1),类);

frame.getContentPane().add(panel); 

frame.validate(); 

start=System.currentTimeMillis(); 

while(System.currentTimeMillis()-start < 100); 

就意味着只在屏幕上显示的图像,并且然后等待100毫秒,并且再次运行该代码(I在主节目的开始加载每个图像仅一次) 和我的问题是:在间隔之间的图像是不相等的 然后我add while(panel.isShowing()!= true);确保我的面板在屏幕上(与此同时,我可以发现,我等待100毫秒之前,面板上屏幕),但我有同样的问题

+0

你真的打算在这样的循环中进行紧缩吗?还是这个伪代码? – 2012-08-05 17:38:39

+2

为了使您的应用程序使用的CPU少得多,请使用Thread.sleep(100)而不是空的while循环。 – Vulcan 2012-08-05 17:43:30

+1

使用一个间隔而不是睡眠的计时器... http://docs.oracle.com/javase/tutorial/uiswing/misc/timer.html – Adam 2012-08-05 18:16:32

回答

2

你的紧密循环没有做任何事情 - 看看每个后面的;


这是什么逻辑在此,不管?我假设你的意思是:

while (!panel.isShowing()) { 
    panel.setVisible(true); 
} 

据对Component.isShowing()文档,

确定此组件是否在屏幕上显示。 这意味着组件必须可见,并且它必须位于可见和显示的容器中。


除此之外,你应该考虑使用Timer。您可以使用将在事件分派线程上运行的ActionListener,从而实现UI组件的安全变更。