Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/340.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 无法在JFoenix中更新JFXSpinner可见性_Java_Javafx_Jfoenix - Fatal编程技术网

Java 无法在JFoenix中更新JFXSpinner可见性

Java 无法在JFoenix中更新JFXSpinner可见性,java,javafx,jfoenix,Java,Javafx,Jfoenix,我有一个简单的登录窗口,我想在发送登录请求时显示一个JFXSpinner(像加载程序一样)。为此,我创建了一个JFXSpinner对象,最初我将其设置为不可见(将可见性值设置为false),当用户单击登录按钮时,我希望在发送请求之前显示微调器,并在完成请求后再次隐藏它。 问题是:我无法显示我的JFXSpinner。有人能帮我吗 这是我的登录方法 //loader : is my JFXSpinner object public void login(ActionEvent event)

我有一个简单的登录窗口,我想在发送登录请求时显示一个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();
}
//loader:是我的JFXSpinner对象
公共无效登录(ActionEvent事件)
{
Task Task=newjavafx.concurrent.Task()
{
@凌驾
受保护的Void调用()引发异常
{
loader.setVisible(true);
if(Compte.login(username.getText(),password.getText())
{
System.err.println(“没问题”);
}
其他的
{
//待办事项
}
loader.setVisible(false);
返回null;
}
@凌驾
受保护的无效已成功()
{
loader.setVisible(false);
}
@凌驾
受保护的void失败()
{
loader.setVisible(false);
}
};
线程线程=新线程(任务,“我的任务”);
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();
}
公共无效登录(ActionEvent事件){
Task Task=newjavafx.concurrent.Task(){
@凌驾
受保护的Void调用()引发异常{
if(Compte.login(username.getText(),password.getText()){
System.err.println(“没问题”);
}否则{
//待办事项
}
返回null;
}
@凌驾
受保护的无效已成功(){
loader.setVisible(false);
}
@凌驾
受保护的void失败(){
loader.setVisible(false);
}
};
线程线程=新线程(任务,“我的任务”);
setDaemon(true);
loader.setVisible(true);
thread.start();
}

警告:您的代码中可能存在其他问题:您只发布了此方法,而没有发布(例如,
loader
已定义或添加到场景图中的位置)。您的微调器最初不可见还是在使用其setVisible属性后未显示?