JavaFX TableView列设置单元格值时出现空指针异常求助
JavaFX TableView初始化空指针问题求助
我是JavaFX新手(仍在学习中),目前正在学习TableView相关内容。跟着某YouTube视频编写了向TableView插入单元格的程序,视频里运行顺畅,但我照做后编辑器无报错,运行时出现错误,错误信息如下:
Exception in Application start method java.lang.reflect.InvocationTargetException at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:118) at java.base/java.lang.reflect.Method.invoke(Method.java:580) at javafx.graphics@21.0.1/com.sun.javafx.application.LauncherImpl.launchApplicationWithArgs(LauncherImpl.java:464) at javafx.graphics@21.0.1/com.sun.javafx.application.LauncherImpl.launchApplication(LauncherImpl.java:364) at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103) at java.base/java.lang.reflect.Method.invoke(Method.java:580) at java.base/sun.launcher.LauncherHelper$FXHelper.main(LauncherHelper.java:1135) Caused by: java.lang.RuntimeException: Exception in Application start method at javafx.graphics@21.0.1/com.sun.javafx.application.LauncherImpl.launchApplication1(LauncherImpl.java:893) at javafx.graphics@21.0.1/com.sun.javafx.application.LauncherImpl.lambda$launchApplication$2(LauncherImpl.java:196) at java.base/java.lang.Thread.run(Thread.java:1583) Caused by: javafx.fxml.LoadException: /C:/Users/Mako/Documents/Programming/Eclipse-workspace2/JavaFXTable/bin/application/Scene1.fxml at javafx.fxml@21.0.1/javafx.fxml.FXMLLoader.constructLoadException(FXMLLoader.java:2722) at javafx.fxml@21.0.1/javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2700) at javafx.fxml@21.0.1/javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2563) at javafx.fxml@21.0.1/javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3376) at javafx.fxml@21.0.1/javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3332) at javafx.fxml@21.0.1/javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3300) at javafx.fxml@21.0.1/javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3272) at javafx.fxml@21.0.1/javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3248) at javafx.fxml@21.0.1/javafx.fxml.FXMLLoader.load(FXMLLoader.java:3241) at JavaFXTable/application.Main.start(Main.java:16) at javafx.graphics@21.0.1/com.sun.javafx.application.LauncherImpl.lambda$launchApplication1$9(LauncherImpl.java:839) at javafx.graphics@21.0.1/com.sun.javafx.application.PlatformImpl.lambda$runAndWait$12(PlatformImpl.java:483) at javafx.graphics@21.0.1/com.sun.javafx.application.PlatformImpl.lambda$runLater$10(PlatformImpl.java:456) at java.base/java.security.AccessController.doPrivileged(AccessController.java:400) at javafx.graphics@21.0.1/com.sun.javafx.application.PlatformImpl.lambda$runLater$11(PlatformImpl.java:455) at javafx.graphics@21.0.1/com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:95) at javafx.graphics@21.0.1/com.sun.glass.ui.win.WinApplication._runLoop(Native Method) at javafx.graphics@21.0.1/com.sun.glass.ui.win.WinApplication.lambda$runLoop$3(WinApplication.java:185) ... 1 more Caused by: java.lang.NullPointerException: Cannot invoke "javafx.scene.control.TableColumn.setCellValueFactory(javafx.util.Callback)" because "this.name" is null at JavaFXTable/application.Scene1Controller.initialize(Scene1Controller.java:32) at javafx.fxml@21.0.1/javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2670) ... 17 more Exception running application application.Main
以下是我当前包中的所有代码,均在同一个包内:
Main.java
package application; import java.io.IOException; import javafx.application.Application; import javafx.fxml.FXMLLoader; import javafx.stage.Stage; import javafx.scene.Parent; import javafx.scene.Scene; import javafx.scene.layout.BorderPane; public class Main extends Application { @Override public void start(Stage stage) throws IOException { Parent root = FXMLLoader.load(getClass().getResource("Scene1.fxml")); Scene scene = new Scene(root); stage.setScene(scene); stage.show(); } public static void main(String[] args) { launch(args); } }
Scene1Controller.java
package application; import java.net.URL; import java.util.ResourceBundle; import javafx.collections.FXCollections; import javafx.collections.ObservableList; import javafx.fxml.FXML; import javafx.fxml.Initializable; import javafx.scene.control.TableColumn; import javafx.scene.control.TableView; import javafx.scene.control.cell.PropertyValueFactory; public class Scene1Controller implements Initializable{ @FXML private TableColumn<Food, String> name; @FXML private TableColumn<Food, Integer> price; @FXML private TableView<Food> table; ObservableList<Food> list = FXCollections.observableArrayList( new Food("Pizza", 10), new Food("IcedCream", 5) ); @Override public void initialize(URL arg0, ResourceBundle arg1) { name.setCellValueFactory(new PropertyValueFactory<Food, String>("name")); price.setCellValueFactory(new PropertyValueFactory<Food, Integer>("price")); table.setItems(list); } }
Food.java
package application; public class Food { String name; int price; public Food(String name, int price) { this.name = name; this.price = price; } public String getName() { return name; } public int getPrice() { return price; } }
Scene1.fxml
<?xml version="1.0" encoding="UTF-8"?> <?import javafx.scene.control.TableColumn?> <?import javafx.scene.control.TableView?> <?import javafx.scene.layout.AnchorPane?> <AnchorPane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="400.0" prefWidth="600.0" xmlns="http://javafx.com/javafx/21" xmlns:fx="http://javafx.com/fxml/1" fx:controller="application.Scene1Controller"> <children> <TableView fx:id="table" layoutX="200.0" layoutY="14.0" prefHeight="200.0" prefWidth="200.0"> <columns> <TableColumn fx:id="name" prefWidth="75.0" text="name" /> <TableColumn fx:id="price" prefWidth="75.0" text="price" /> </columns> <columnResizePolicy> <TableView fx:constant="CONSTRAINED_RESIZE_POLICY" /> </columnResizePolicy> </TableView> </children> </AnchorPane>
希望有人能帮忙,祝好!我也尝试过跟着其他同主题视频操作,但都没有解决问题。
内容的提问来源于stack exchange,提问作者Doggoder
相关产品推荐
相关产品推荐

