Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/apache-flex/4.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
JavaFX-需要通过初始化预填充字段,但它赢了';我不允许有例外。有办法吗?_Java_Javafx - Fatal编程技术网

JavaFX-需要通过初始化预填充字段,但它赢了';我不允许有例外。有办法吗?

JavaFX-需要通过初始化预填充字段,但它赢了';我不允许有例外。有办法吗?,java,javafx,Java,Javafx,我正在尝试编写一个简单的登录屏幕,这将导致另一个程序 用户可以1)登录或2)注册-两个不同的场景 当用户注册时,用户名/加密密码保存在数据库中 当用户登录时,他可以选择让程序记住他的登录详细信息,以便下次使用,方法是将其临时保存在计算机上的XML文件中 我的想法是,让程序检查场景加载中是否存在XML文件,如果存在,然后用XML文件中的数据预填充字段 我已经让XML阅读器工作了(只是在这个特定的例子中没有),我认为最好的方法是通过initialize选项运行它,因为我知道这是在触发任何操作之前完成

我正在尝试编写一个简单的登录屏幕,这将导致另一个程序

用户可以1)登录或2)注册-两个不同的场景

当用户注册时,用户名/加密密码保存在数据库中

当用户登录时,他可以选择让程序记住他的登录详细信息,以便下次使用,方法是将其临时保存在计算机上的XML文件中

我的想法是,让程序检查场景加载中是否存在XML文件,如果存在,然后用XML文件中的数据预填充字段

我已经让XML阅读器工作了(只是在这个特定的例子中没有),我认为最好的方法是通过initialize选项运行它,因为我知道这是在触发任何操作之前完成的

这是我的密码: 问题: 此代码需要抛出三个异常,这在初始化中是不允许的

有没有什么方法可以绕过这一点,或者用另一种方法读取XML输入并在initialize方法中运行它

谢谢
-Kim Andre Langholz

你必须用一个

来包围你的代码。你必须用一个

来包围你的代码,一种方法是用一个try/catch块来包围你的代码。但还有另一种方法。您不必实现接口来利用其功能。从文件中:

注意:此接口已被自动将
位置
资源
属性注入控制器所取代。现在将自动调用控制器定义的任何适当注释的no arg
initialize()
方法。建议尽可能使用注入法

使用此选项,您可以将代码更改为以下内容:

public class Controller {

    // If you still need access to the URL or ResourceBundle
    @FXML private URL location;
    @FXML private ResourceBundle resources;

    @FXML
    private void initialize() throws Exception { // can now add throws clause
        File file = new File("C:\\Users\\konta\\IdeaProjects\\project\\files\\rememberme.xml");
        boolean exists = file.exists();
        if (exists) {
                DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();
                DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder();
                Document document = documentBuilder.parse(file);
                document.getDocumentElement().normalize();
                savedUsername = document.getElementsByTagName("Username").item(0).getTextContent();
                savedPassword = document.getElementsByTagName("Password").item(0).getTextContent();

            if (savedUsername.length() >= 1 && savedPassword.length() == 44) {
                usernameInput.setText(username);
                passwordInput.setText(password);
            }
        }
    }

}
请注意,此设置会将任何抛出的异常传播到
fxmloader.load
的调用方;它将被包装在
调用targetException
中。如果您可以从
initilize
方法中的错误中恢复,那么您应该使用try/catch块,正如Haroldo_OK所建议的那样。

as,一种方法是将代码包围在try/catch块中。但还有另一种方法。您不必实现接口来利用其功能。从文件中:

注意:此接口已被自动将
位置
资源
属性注入控制器所取代。现在将自动调用控制器定义的任何适当注释的no arg
initialize()
方法。建议尽可能使用注入法

使用此选项,您可以将代码更改为以下内容:

public class Controller {

    // If you still need access to the URL or ResourceBundle
    @FXML private URL location;
    @FXML private ResourceBundle resources;

    @FXML
    private void initialize() throws Exception { // can now add throws clause
        File file = new File("C:\\Users\\konta\\IdeaProjects\\project\\files\\rememberme.xml");
        boolean exists = file.exists();
        if (exists) {
                DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();
                DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder();
                Document document = documentBuilder.parse(file);
                document.getDocumentElement().normalize();
                savedUsername = document.getElementsByTagName("Username").item(0).getTextContent();
                savedPassword = document.getElementsByTagName("Password").item(0).getTextContent();

            if (savedUsername.length() >= 1 && savedPassword.length() == 44) {
                usernameInput.setText(username);
                passwordInput.setText(password);
            }
        }
    }

}

请注意,此设置会将任何抛出的异常传播到
fxmloader.load
的调用方;它将被包装在
调用targetException
中。如果您可以从
initilize
方法中的错误中恢复,那么您应该按照Haroldo_的建议使用try/catch块。OK。

最初尝试过,但仍然给了我一个错误:/最初尝试过,但还是给了我一个错误/非常感谢你!这对我来说非常有效。感谢您的时间和帮助:-)非常感谢!这对我来说非常有效。感谢您的时间和帮助:-)