JavaFX-需要通过初始化预填充字段,但它赢了';我不允许有例外。有办法吗?
我正在尝试编写一个简单的登录屏幕,这将导致另一个程序 用户可以1)登录或2)注册-两个不同的场景 当用户注册时,用户名/加密密码保存在数据库中 当用户登录时,他可以选择让程序记住他的登录详细信息,以便下次使用,方法是将其临时保存在计算机上的XML文件中 我的想法是,让程序检查场景加载中是否存在XML文件,如果存在,然后用XML文件中的数据预填充字段 我已经让XML阅读器工作了(只是在这个特定的例子中没有),我认为最好的方法是通过initialize选项运行它,因为我知道这是在触发任何操作之前完成的 这是我的密码: 问题: 此代码需要抛出三个异常,这在初始化中是不允许的 有没有什么方法可以绕过这一点,或者用另一种方法读取XML输入并在initialize方法中运行它 谢谢JavaFX-需要通过初始化预填充字段,但它赢了';我不允许有例外。有办法吗?,java,javafx,Java,Javafx,我正在尝试编写一个简单的登录屏幕,这将导致另一个程序 用户可以1)登录或2)注册-两个不同的场景 当用户注册时,用户名/加密密码保存在数据库中 当用户登录时,他可以选择让程序记住他的登录详细信息,以便下次使用,方法是将其临时保存在计算机上的XML文件中 我的想法是,让程序检查场景加载中是否存在XML文件,如果存在,然后用XML文件中的数据预填充字段 我已经让XML阅读器工作了(只是在这个特定的例子中没有),我认为最好的方法是通过initialize选项运行它,因为我知道这是在触发任何操作之前完成
-Kim Andre Langholz你必须用一个来包围你的代码。你必须用一个来包围你的代码,一种方法是用一个try/catch块来包围你的代码。但还有另一种方法。您不必实现接口来利用其功能。从文件中: 注意:此接口已被自动将
位置
和资源
属性注入控制器所取代。现在将自动调用控制器定义的任何适当注释的no arginitialize()
方法。建议尽可能使用注入法
使用此选项,您可以将代码更改为以下内容:
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 arginitialize()
方法。建议尽可能使用注入法
使用此选项,您可以将代码更改为以下内容:
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。最初尝试过,但仍然给了我一个错误:/最初尝试过,但还是给了我一个错误/非常感谢你!这对我来说非常有效。感谢您的时间和帮助:-)非常感谢!这对我来说非常有效。感谢您的时间和帮助:-)