我不确定我是否真的正确地提出了问题......而且我甚至不确定我是否相关表达了这个问题。所以,我提前道歉......但我是相当卡住在这个问题上,并感谢所有帮助..此外,我坦率地说不是一个专家,所以...请温柔,我不是试图是一个白痴。Java:我应该如何实现等待,以便图像呈现?
因此,坦率地说,我的程序的重点是一个简单的游戏,它基于电视上的某个游戏节目,它具有生命线。这个具体的一个是“电话一个朋友”...我有一个报价'按钮'(真的JPanel
有MouseListener
)。按下此按钮后,我希望它添加,并将JLabel
或JPanel
绘制到JFrame
上,无论是绘制动画gif(倒计时)还是锁定其他Component
s直到发生30秒。对于参考,我不使用LayoutManager
此刻...
的方式我一直在试图做到这一点,就是:
ImageIcon CountdownImg = new ImageIcon("countdown.gif");
JLabel CountdownLbl = new JLabel(CountdownImg);
this.getContentPane().add(CountdownLbl);
CountdownLbl.setLocation(200, 200);
CountdownLbl.setSize(new Dimension(CountdownImg.getIconWidth(), CountdownImg.getIconHeight()));
long startTime = System.currentTimeMillis();
while(System.currentTimeMillis() < startTime + 30000) {
;
}
我知道我的while
回路存在的问题。没有循环,图像呈现成功。有了它,java会一直等到条件满足后再渲染CountdownLbl
。我也尝试创建另一个JFrame
与内容窗格有图像,但(可能再次,由于我自己的误解或穷人线程..),但框架只是出现,并没有呈现其内容。有时在运行时,我注意到有一个Image Fetcher
线程,我假设我非常糟糕的循环可能会干扰此线程,并且此线程负责渲染我的映像。
所以我想这个问题应该是......我怎么才能真正以线程安全的方式实现这个...?如果这是正确的?
谢谢你的时间,耐心和努力。
1)请学习常见的[Java命名约定](http://java.sun.com/docs/books/jls/second_edition/html/names.doc.html#73307)(具体用于名称的情况)类,方法和属性名称并一致使用它们。 2)为了更快地获得更好的帮助,请发布[SSCCE](http://sscce.org/)。 3)不要阻塞EDT(Event Dispatch Thread) - 当发生这种情况时,GUI将“冻结”。而不是调用'Thread.sleep(n)'实现一个Swing'Timer'来重复执行任务,或者一个'SwingWorker'执行长时间运行的任务。请参阅[并发在Swing](http://docs.oracle.com/javase/tutorial/uiswing/concurrency/)。 –
*“也尝试创建另一个'JFrame'”*请参阅[使用多个JFrames,好/坏实践?](http://stackoverflow.com/a/9554657/418556) –