【发布时间】:2015-12-09 23:09:04
【问题描述】:
我有以下伪代码来澄清我的问题和解决方案。我的原始帖子和详细结果在 Stack Overflow 上:Wait() & Sleep() Not Working As Thought。
public class PixelArtSlideShow { // called with click of Menu item.
create List<File> of each selected pixelArtFile
for (File pixelArtFile : List<File>) {
call displayFiles(pixelArtFile);
TimeUnits.SECONDS.sleep(5); }
}
public static void displayFiles(File pixelArtFile) {
for (loop array rows)
for (loop array columns)
read-in sRGB for each pixel - Circle Object
window.setTitle(....)
}
// when above code is used to Open a pixelArtFile, it will appear instantly in a 32 x 64 array
问题:正如另一篇文章中详细描述的那样。每个pixelArtFile 将正确显示setTitle() 并暂停约5 秒,但在5 秒过去后,除了最后一个文件外,圆圈不会更改为指定的颜色。就像 TimeUnits.SECONDS.sleep(5); 中的所有代码一样。被跳过除了window.setTitle(...)?
我的理解是 TimeUnits.SECONDS.sleep(5); 中断 UI 线程无法控制,我想必须以某种方式隔离以允许 displayFiles(File pixelArtFile) 完全执行。
您能否向我展示使用伪代码解决此问题的最直接方法,以获得更完整的解决方案?
我尝试过Runnables、Platform.runLater()、FutureTask<Void> 等,但我对它们的工作原理和精确编码感到非常困惑。
我还在网上发布了两个 UI 窗口:Virtual Art。我认为 Pixel Array 窗口中显示的 pixelArtFile 可能会澄清问题。
谢谢
【问题讨论】:
-
伪代码或代码 sn-ps 很少适合在诸如此类的 StackOverflow 问题中使用。通常对您和预期答案最有帮助的是包括:a)complete, compilable, standalone, minimal code,有人可以复制和粘贴以重现手头的问题(并且仅是问题),b)您的目标的英文描述,c)用英文描述您遇到的问题。
-
最好在 GitHub 上发布 MCVE 吗?
-
不,最好在问题中包含 mcve。 MCVE 总是足够小,无需任何额外的外部资源即可放入问题中。
标签: javafx-8 thread-sleep