我会明白为什么
scene.setCursor(Cursor.WAIT);
long task...
scene.setCursor(Cursor.DEFAULT);
需要新的线程;它适用于:
private void set_cursore_attesa(final Scene scene)
{
Runnable r=new Runnable() {
@Override
public void run() {
scene.setCursor(Cursor.WAIT);
}
};
Thread t=new Thread(r);
t.start();
}
private void set_cursore_normale(final Scene scene)
{
Runnable r=new Runnable() {
@Override
public void run() {
scene.setCursor(Cursor.DEFAULT);
}
};
Thread t=new Thread(r);
t.start();
}
in my function:
set_cursore_attesa(scene);
long task...
set_cursore_normale(scene);
为什么我不能使用同一线程?一世:
那么,我的长任务不会进入MAIN队列吗?因为,如果它进入主队列,我希望它在我的WAIT游标首先插入队列之后执行。为什么会这样呢?
没有线程,您的代码将在FX
Application线程上执行。这是(有效)负责将UI呈现到屏幕并处理用户输入的线程。如果您在此线程上执行了长时间运行的任务,那么您将阻止FX
Application Thread的任何正常功能发生,直到您完成长时间运行的任务。特别是如果
scene.setCursor(Cursor.WAIT);
longRunningTask();
scene.setCursor(Cursor.DEFAULT);
然后将按照您指定的顺序进行设置, 但是直到所有代码行都完成后,场景才会重新渲染 。因此,直到代码完成后,您才真正看到UI的任何更改-
包括光标的更改。下次FX Application Thread有机会渲染场景时,光标设置为Cursor.DEFAULT
,您将永远看不到等待光标。
对于多线程和JavaFX,有两个基本规则(相同的规则通常适用于大多数UI工具包):
因此,您的解决方案实际上并不正确,因为您违反了这两个规则。你应该
WAIT
FX Application线程上DEFAULT
,在FX Application Thread上将光标设置回。您可以使用Task
:
scene.setCursor(Cursor.WAIT);
Task<Void> task = new Task<Void>() {
@Override
public Void call() {
// long running task here...
return null ;
}
};
task.setOnSucceeded(e -> scene.setCursor(Cursor.DEFAULT));
new Thread(task).start();
在下面的代码中,为什么主线程要等到子线程完成。 Driver.java ThreadRunner.java 调用“t.start()”后,在驱动程序类中,程序是否应该退出?我没有使用join,但主线程仍在等待,直到新旋转的“ThreadRunner”运行开始。这是因为在java中,主线程(由main方法启动)总是等待所有线程关闭吗?
问题内容: 为什么线程不等待?线程启动,然后进入等待池,但是在那一刻之后它将继续执行。 问题答案: 您正在线程对象本身上进行同步,这是错误的用法。即将发生的事情是,即将死去的执行线程总是调用其对象: 依赖于this。因此,很清楚为什么在其中有或没有自己的情况下都会得到相同的行为。 解决方案:使用单独的对象进行线程协调;这是标准做法。
考虑以下代码: 这是我得到的输出: 但是如果我把代码改成这样: 我会得到这个: 我很困惑,因为根据文档,应该暂停执行,直到promise得到解决。在这种情况下,第一个示例应该以数组的形式返回
问题内容: 说你有这个代码 我的问题是,为什么您需要在此处进行while循环。 pthread_cond_wait* 不会只等到信号线程发出 cam_video_cond 信号吗?好的,我知道您可能会遇到以下情况:调用 pthread_cond_wait 时 cam- > status不等于 WAIT_DISPAY ,但是在那种情况下,您可以通过 if 条件检查它,而不是使用 while 。 *
我的问题得到了回答,我的问题得到了解决。我已经更新了这个线程与我的最终解决方案 我正在做这个学校作业(测验程序),我们最初只需要做一个纯粹的基于文本的控制台游戏,但我想挑战自己,试着用JavaFX创建它,我们刚刚开始学习。 这是一个基于回合的问答游戏,玩家将被呈现一个问题,要求玩家通过两个按钮(对或错按钮)回答对/错 游戏流程: 我正在运行一个for循环,只要我的ArrayList中还有问题,这个
所以我有这样的东西: 一切都很好,直到我不得不等待其他事情完成,然后才能继续运行,所以我这样修改了它: 后来我做了这样的事情: 现在,我的gui在切换场景时开始滞后 - 这意味着 - 整个thread1自行处理,然后gui加载所有内容。经过一些研究,我认为发生这种情况是因为主线程正在处理runLater“请求”,并且由于wait(),主线程必须等到第一个辅助线程来到CountDown()。 我的问