我正在我的UI线程中调用一个方法。在这个方法中创建了一个新线程。我需要UI线程等待这个新线程完成,因为我需要这个线程的结果来继续UI线程中的方法。但我不想让UI在等待时冻结。有没有办法让UI线程在不忙的情况下等待?。
只需调用一个方法,在线程完成时通知GUI。比如:
class GUI{
public void buttonPressed(){
new MyThread().start();
}
public void notifyGui(){
//thread has finished!
//update the GUI on the Application Thread
Platform.runLater(updateGuiRunnable)
}
class MyThread extends Thread{
public void run(){
//long-running task
notifyGui();
}
}
}
永远不要让FX应用程序线程等待;它将冻结用户界面并使其无响应,无论是在处理用户操作方面,还是在向屏幕呈现任何内容方面。
如果您希望在长时间运行的过程完成后更新用户界面,请使用javafx.concurrent.任务
API。例如。
someButton.setOnAction( event -> {
Task<SomeKindOfResult> task = new Task<SomeKindOfResult>() {
@Override
public SomeKindOfResult call() {
// process long-running computation, data retrieval, etc...
SomeKindOfResult result = ... ; // result of computation
return result ;
}
};
task.setOnSucceeded(e -> {
SomeKindOfResult result = task.getValue();
// update UI with result
});
new Thread(task).start();
});
显然,将某种类型的结果
替换为代表长期运行过程结果的任何数据类型。
请注意,onSucceeded
块中的代码:
因此,这个解决方案可以通过“等待任务完成”来做任何你能做的事情,但同时不会阻塞用户界面线程。
我正在尝试从JavaFX应用程序中创建一个JFrame窗口。我正在使用Oracle Java 8,我能够在Linux,Windows中做我需要的事情,但在Mac OS中却不能。这似乎是一个JVM实现问题。以下是我的要求: 我需要调用一个创建游戏窗口的库方法(JFrame的扩展类)。我需要能够在游戏中使用键盘。 我可以访问库的源代码但无意更改库的源代码 我需要在游戏结束后处理游戏信息,所以我的主线程
我打算在主线程中启动2个线程,主线程应该等到所有2个子线程完成,我就是这样做的。 在上面的代码中,确实让主线程等待子线程,但问题是,在第一个线程完成之前不会创建第二个线程。这不是我想要的。 我想要的是,这两个线程立即在主线程中创建,然后主线程等待它们完成。似乎做不到,是吗? 我想,也许我可以通过一个信号灯来完成这项工作,但还有别的方法吗?
我如何启动两个线程,其中thread1首先执行,thread2在thread1结束时启动,而主方法线程可以在不锁定其他两个线程的情况下继续工作? 我尝试了join(),但是它需要从线程调用,线程必须等待另一个线程,没有办法执行类似thread2.join(thread1)的操作;因此,如果我在main()中调用join,我将有效地停止主线程的执行,而不仅仅是Thread2的执行。 #编辑:为什么我
这可能是在类似的背景下问的,但我在搜索了大约20分钟后找不到答案,所以我会问。 我已经编写了一个Python脚本(比如说:scriptA.py)和一个脚本(比如说scriptB.py) 在scriptB中,我想用不同的参数多次调用scriptA,每次运行大约需要一个小时,(这是一个巨大的脚本,做了很多事情……不用担心),我希望能够同时使用所有不同的参数运行scriptA,但我需要等到所有参数都完成
问题内容: 我正在为我的ubuntu服务器(针对我的多客户端匿名聊天程序)实现一种简单的线程池机制,并且需要使我的工作线程进入睡眠状态,直到需要执行一项工作(以函数指针和参数的形式) 。 我当前的系统即将关闭。我(工人线程正在)问经理是否有工作可用,以及是否有5毫秒没有睡眠。如果存在,请将作业添加到工作队列中并运行该函数。糟糕的循环浪费。 什么我 喜欢 做的是做一个简单的事件性的系统。我正在考虑有
问题内容: 我正在用一个应用程序逻辑线程和一个数据库访问线程来制作Java应用程序。他们都坚持为应用程序和都需要的整个生命周期,以在同一时间运行(一个会谈到服务器,一个谈判给用户;当应用程序完全启动,我需要两个人工作)。 但是,在启动时,我需要确保最初应用线程等待直到数据库线程准备就绪(当前是通过轮询自定义方法确定的)。我不介意应用线程在数据库线程准备就绪之前是否阻塞。 看起来不是解决方案-db线