无法更新 JFoenix 中的 JFXSpinner 可见性
Unable to update JFXSpinner visibility in JFoenix
我有一个简单的登录 window,我想在发送登录请求时显示 JFXSpinner(如加载程序)。为此,我创建了一个 JFXSpinner 对象,最初我使它不可见(将可见性值设置为 false),当用户单击“登录”按钮时,我想在发送请求之前显示微调器并在完成请求后再次隐藏它.
问题是:我无法显示我的 JFXSpinner。有人可以帮我吗?
这是我的登录方法
//loader : is my JFXSpinner object
public void login(ActionEvent event)
{
Task task = new javafx.concurrent.Task<Void>()
{
@Override
protected Void call() throws Exception
{
loader.setVisible(true);
if(Compte.login(username.getText(), password.getText()))
{
System.err.println("It's okey");
}
else
{
//TODO
}
loader.setVisible(false);
return null;
}
@Override
protected void succeeded()
{
loader.setVisible(false);
}
@Override
protected void failed()
{
loader.setVisible(false);
}
};
Thread thread = new Thread(task, "My Task");
thread.setDaemon(true);
thread.start();
}
您不能从后台线程修改 UI,当您尝试调用
时会发生这种情况
loader.setVisible(true);
在任务的 call()
方法中。
相反,您应该在开始任务之前立即从 FX 应用程序线程进行调用:
public void login(ActionEvent event) {
Task task = new javafx.concurrent.Task<Void>() {
@Override
protected Void call() throws Exception {
if(Compte.login(username.getText(), password.getText())) {
System.err.println("It's okey");
} else {
//TODO
}
return null;
}
@Override
protected void succeeded() {
loader.setVisible(false);
}
@Override
protected void failed() {
loader.setVisible(false);
}
};
Thread thread = new Thread(task, "My Task");
thread.setDaemon(true);
loader.setVisible(true);
thread.start();
}
我有一个简单的登录 window,我想在发送登录请求时显示 JFXSpinner(如加载程序)。为此,我创建了一个 JFXSpinner 对象,最初我使它不可见(将可见性值设置为 false),当用户单击“登录”按钮时,我想在发送请求之前显示微调器并在完成请求后再次隐藏它. 问题是:我无法显示我的 JFXSpinner。有人可以帮我吗?
这是我的登录方法
//loader : is my JFXSpinner object
public void login(ActionEvent event)
{
Task task = new javafx.concurrent.Task<Void>()
{
@Override
protected Void call() throws Exception
{
loader.setVisible(true);
if(Compte.login(username.getText(), password.getText()))
{
System.err.println("It's okey");
}
else
{
//TODO
}
loader.setVisible(false);
return null;
}
@Override
protected void succeeded()
{
loader.setVisible(false);
}
@Override
protected void failed()
{
loader.setVisible(false);
}
};
Thread thread = new Thread(task, "My Task");
thread.setDaemon(true);
thread.start();
}
您不能从后台线程修改 UI,当您尝试调用
时会发生这种情况loader.setVisible(true);
在任务的 call()
方法中。
相反,您应该在开始任务之前立即从 FX 应用程序线程进行调用:
public void login(ActionEvent event) {
Task task = new javafx.concurrent.Task<Void>() {
@Override
protected Void call() throws Exception {
if(Compte.login(username.getText(), password.getText())) {
System.err.println("It's okey");
} else {
//TODO
}
return null;
}
@Override
protected void succeeded() {
loader.setVisible(false);
}
@Override
protected void failed() {
loader.setVisible(false);
}
};
Thread thread = new Thread(task, "My Task");
thread.setDaemon(true);
loader.setVisible(true);
thread.start();
}