好吧我有点奇怪的可能很容易公平但我正在使用通过JDBC连接的sql数据库的java fx应用程序。一切都很好,除了一件事。按下按钮时,场景会发生变化,并且数据从数据库中拉出,这一切都完美无缺,调试显示正确的值是他们需要的,但是当我调用一个方法如label1.setText(someString)时;它抛出一个NPE。
所以我运行调试所有变量看起来都不错。然后我在节点本身做一个简单的打印它打印null我认为fxml注入处理实例化。我检查了fxml文件,所有内容都有一个fx-id,并且在课堂上提到了所有内容。它可能是一些非常愚蠢的事情。我们忽略了它。
这是抛出异常的方法,这个类包含mehtods start,main,handle和this方法
public void insertData(ResultSet rsIn) {
try {
while (rsIn.next()) {
int housenumber = rsIn.getInt("housenumber");
String maintext = rsIn.getString("maintext");
String img1 = rsIn.getString("img1");
String img2 = rsIn.getString("img2");
String img3 = rsIn.getString("img3");
String img4 = rsIn.getString("img4");
// scrollLab is of Text type
scrollLab.setText(maintext);//here is where the NPE is thrown
}
} catch (SQLException sql) {
sql.printStackTrace();
}
}
另一个类包含所有与sql相关的方法和getStuff方法,其中Resultset rsIn来自
public void getstuff(String buttonid) {
switch (buttonid) {
case "winterfell":
try {
conn = DriverManager.getConnection(DB_URL, USER, PASS);
Statement stark = conn.createStatement();
System.out.println("Fetching records");
String sql = "SELECT * FROM houseinfo WHERE housenumber = 1";
rs = stark.executeQuery(sql);
GOT_Map map = new GOT_Map();
map.insertData(rs);
}catch(SQLException e){}
break;
最后,handle方法启动进程,这是控制器类与引发异常的类相同
@Override
public void handle(ActionEvent event) {
Sql_handler sql = new Sql_handler();
try {
// will load the new scene for all map buttons but will pull data from the database to fill blanks
if (event.getSource() == winterfell) {
System.out.println("winterfell clicked");
//getting reference to the button's stage
Stage stageref = (Stage) winterfell.getScene().getWindow();
inforoot = FXMLLoader.load(getClass().getResource("infoView.fxml"));
stageref.setScene(scene2);
sql.getstuff("winterfell");
这可能是一个简单的解决方案,我忽视了这两天没有停止的工作 非常感谢任何帮助