我有一根这样的线。
公共类camerathread扩展线程{
private AtomicBoolean runCamera;
public CameraThread(AtomicBoolean runCamera) {
this.runCamera = runCamera;
}
@Override
public void run() {
while (Main.RUNTHREAD) {
while (runCamera.get()) {
Platform.runLater(() -> {
System.out.println("Hello");
threadSleep();
});
}
}
}
private void threadSleep() {
try {
Thread.sleep(2000L);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
当我开始 runCamera
至 runCamera.set(true)
在线程的外面,整个gui都冻结了,我什么都做不了。
这是一个最小的例子,我不能让它正常工作。我用过 RunLater
但这次,我坐在 Dell precision M6400
从2007年开始。有没有可能这台机器不能用java处理线程?
或者我该如何解决这个问题?
要重现此问题,只需键入以下内容:
wget https://github.com/DanielMartensson/Darknet-Data-Creator/archive/main.zip
unzip Darknet-Data-Creator-main.zip
cd Darknet-Data-Creator-main
mvn javafx:run
然后点击 Scan
按钮,选择网络摄像头(usb、笔记本电脑摄像头),然后按 Save to folder
按钮。只需选择一些任意文件夹。然后按 Open camera
按钮
1条答案
按热度按时间t8e9dugd1#
问题是你正在使用
Thread.Sleep()
内部Platform.runLater(...)
,这意味着您正在休眠gui,而不是您的相机线程。试试这个,注意runlater在
Platform.runLater
代码:runlater中唯一应该做的是直接改变gui的事情。任何计算、睡眠、处理、文件读取等都应分开保存。