这些坑对于初学者很容易踩,JavaFX经常会报错空指针异常遇到其中一个问题可能就会消耗好几天的时间。
JavaFX 采用的是MVC架构设计,页面设计使用 fxml文件;业务逻辑采用Controller,并在Controller中使用@FXML注解以及 fx :id="xxx"
来绑定fxml文件中的组件;
JDK 8 以上的版本之后,JavaFX需要单独导入,所以为了提高项目依赖的可维护性,采用了Maven项目管理。
OK,下面进入正题,由于是本人开发中遇到的问题,出现的报错可能存在其他解决方法,恳请指正。
1. 显式创建对象
在需要调用Service的Controller类中,必须显式创建对象
比如架构设计如下图,定义一系列接口xxxService
,并使用xxxServiceImpl
来实现服务类。
在对应的Controller层,应显式创建对象。
public class PaneSshController{
//调用SftpService的实现类
SftpServiceImpl sftpService = new SftpServiceImpl();
@FXML
void initialize(){
.....
}
}
如果你写成:
public class PaneSshController{
//调用SftpService的实现类
SftpServiceImpl sftpService;
@FXML
void initialize(){
.....
}
}
不会报错,Controller不会报错,但是启动后会报错空指针异常。
2. 请删除多余组件
Controller使用@FXML注册绑定某个组件或者事件时,如果fxml中绑定的组件或者方法被更改,但是Controller类不会报错,运行启动程序会报错加载异常。所以@FXML一定要有效绑定,被删除的组件记得及时删除在Controller绑定的方法或组件。
3. 初始化ObservableList
ObservableList的数组定义和初始化:
ObservableList<File> fileList = FXCollections.observableArrayList();
不要使用
ObservableList<File> fileList =new ObservableList();
否则会出现如下报错:
后面有待更新…有点忙…