JavaFX:如何将按钮属性绑定到线程状态?
我有一个javafx应用程序,它在单击按钮时启动一个新线程 以下是启动线程的方法:JavaFX:如何将按钮属性绑定到线程状态?,java,multithreading,javafx,javafx-8,observable,Java,Multithreading,Javafx,Javafx 8,Observable,我有一个javafx应用程序,它在单击按钮时启动一个新线程 以下是启动线程的方法: private void startTest() { String[] args = {}; String threadId = TestRunner.class.getSimpleName(); mainApp.setRunner(new Thread(() -> { try { TestRunner.
private void startTest() {
String[] args = {};
String threadId = TestRunner.class.getSimpleName();
mainApp.setRunner(new Thread(() -> {
try {
TestRunner.main(args);
} catch (Throwable e) {
LOGGER.fatal(e.getMessage(), e);
}
}, threadId));
mainApp.getRunner().start();
}
我可以使用setRunner()
和getRunner()
访问器从mainApp获取和设置Thread
对象
这就是当前发生的情况:
[开始]
[start]
按钮的文本更改为[PAUSE]
[PAUSE]
按钮的文本更改为[START]
。
提前谢谢 更改节点内线程的值:
private void startTest() {
String[] args = {};
String threadId = TestRunner.class.getSimpleName();
mainApp.setRunner(new Thread(() -> {
try {
TestRunner.main(args);
} catch (Throwable e) {
LOGGER.fatal(e.getMessage(), e);
}
}, threadId));
mainApp.getRunner().start();
}
您有两种选择来做您想做的事情,您可以使用Task类并将您的按钮与任务值的更改绑定,您有updateMessage(“”)和updateValue()或updateTitle,或者您可以在线程内部使用平台类
Button StartButton=new Button("Start");
Thread TestThread=new Thread(new Runnable(){
@Override
public void run()
{
Platform.runLater(new Runnable(){
@Override
public void run()
{
StartButton.setText("Pause");
}
while(true)
{
}
}
);
StartButton.addEventHandler(event->{
if(StartButton.getText().equals("Start"))
{
StartThread.start();
}else{
StartThread.interrupt();
}
使用
服务
管理主应用程序中的后台线程(或当前管理runner
属性的任何位置)。比如:
public class MainApp {
private final Service<Void> testService = new Service<Void>() {
@Override
protected Task<Void> createTask() {
return new Task<Void>() {
@Override
protected Void call() throws Exception {
// code to execute on background thread here:
while (! isCancelled() ) {
// ...
}
}
}
}
};
public Service<Void> getTestService() {
return testService();
}
// ...
}
对于如何实现从
服务
的createTask()
方法返回的任务
有大量信息和示例。这看起来很有希望。我会努力解决这个问题,并尽快接受答案。谢谢这个答案有一半是正确的,但确实有帮助。接受这个答案。谢谢