问题描述
我确实需要有关正在使用的JavaFX应用程序的帮助,但找不到我一直遇到的问题的解决方案。我在该程序中唯一想要的是通过调用我在MainController类上创建的另一个类(Fleet)中的方法来从csv文件中加载数据,但是我仍然遇到有关FXMLLoader和inputstream null的错误。我不确定在Main类或MainController类中是否做错了什么。我也不确定是否需要try catch语句。
这些是我得到的错误:
java.lang.NullPointerException: inputStream is null.
at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2455)
at javafx.fxml.FXMLLoader.load(FXMLLoader.java:2425)
at application.Main.start(Main.java:32)
at com.sun.javafx.application.LauncherImpl.lambda$launchApplication1$8(LauncherImpl.java:863)
at com.sun.javafx.application.PlatformImpl.lambda$runAndWait$7(PlatformImpl.java:326)
at com.sun.javafx.application.PlatformImpl.lambda$null$5(PlatformImpl.java:295)
at java.security.AccessController.doPrivileged(Native Method)
at com.sun.javafx.application.PlatformImpl.lambda$runLater$6(PlatformImpl.java:294)
at com.sun.glass.ui.invokelaterdispatcher$Future.run(invokelaterdispatcher.java:95)
at com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
at com.sun.glass.ui.win.WinApplication.lambda$null$4(WinApplication.java:186)
at java.lang.Thread.run(UnkNown Source)
这是主班:
package application;
import java.io.IOException;
import application.controller.MainController;
import javafx.application.Application;
import javafx.stage.Stage;
import javafx.scene.Scene;
import javafx.scene.Parent;
import javafx.fxml.FXMLLoader;
import javafx.scene.control.Button;
import javafx.scene.layout.borderpane;
import javafx.event.ActionEvent;
import javafx.scene.control.Button;
import javafx.scene.layout.StackPane;
import javafx.scene.layout.borderpane;
public class Main extends Application {
@Override
public void start(Stage primaryStage) {
try {
/*borderpane root = new borderpane();*/
/*root = FXMLLoader.load(getClass().getResource("/application/Main.fxml"));*/
/*root = FXMLLoader.load(getClass().getResource("C:\\Users\\leo\\OneDrive"
+ "\\Documents\\test"
+ "\\src\\application\\Main.fxml"));*/
FXMLLoader loader = new FXMLLoader();
Parent root;
root = loader.load(getClass().getClassLoader().getResourceAsstream("C:\\Users\\leo\\OneDrive"
+ "\\Documents\\test"
+ "\\src\\application\\Main.fxml"));
loader.setController(new MainController());
Scene scene = new Scene(root,400,400);
scene.getStylesheets().add(getClass().getResource("application.css").toExternalForm());
primaryStage.setScene(scene);
primaryStage.show();
} catch(Exception e) {
e.printstacktrace();
}
/*FXMLLoader loader = new FXMLLoader(getClass().getResource("Main.fxml"));
Parent root = loader.load();
primaryStage.setTitle("Spaceship testing title");
Scene scene = new Scene(root,800,800);
primaryStage.setResizable(false);
primaryStage.setScene(scene);
primaryStage.show();
*/
}
public static void main(String[] args) {
launch(args);
}
}
MainController类:
package application.controller;
import javafx.event.ActionEvent;
import javafx.event.Event;
import javafx.event.EventHandler;
import javafx.fxml.FXML;
import javafx.scene.layout.AnchorPane;
import javafx.scene.control.Button;
import javafx.scene.control.TextArea;
import javafx.scene.control.TextField;
import java.awt.Label;
import java.io.IOException;
import application.model.Fleet;
public class MainController implements EventHandler<ActionEvent> {
@FXML
Button button1;
@FXML
TextArea txtResult;
@FXML
TextField txtInput;
@FXML
Label label1;
/* @FXML
private TextArea txtResult;
@FXML
private Label label1;
@FXML
private Button button1;
@FXML
private TextField txtInput;*/
@FXML
public void handle(ActionEvent actionEvent) {
/*String input = txtInput.getText();
txtResult.setText(input);
System.out.println( "button clicked!" );*/
Fleet fl = new Fleet("Casino Starship");
try {
fl.loadStarshipNames("C:\\Users\\leo\\OneDrive\\Documents\\test\\data\\fleet.csv");
fl.loadCrewMembers("C:\\Users\\leo\\OneDrive\\Documents\\test\\data\\personnel.csv");
String input = txtInput.getText();
txtResult.setText(input);
}catch (IOException ex) {
System.out.println( "Error loading the file - please check its location." );
ex.printstacktrace();
}
/* String input = txtInput.getText();
txtResult.setText(input);*/
}
} // end class MainController
这是Main.fxml:
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.scene.control.Button?>
<?import javafx.scene.control.Label?>
<?import javafx.scene.control.TextArea?>
<?import javafx.scene.control.TextField?>
<?import javafx.scene.layout.AnchorPane?>
<AnchorPane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" onDragDetected="#handle" prefheight="800.0" prefWidth="800.0" xmlns="http://javafx.com/javafx/11.0.1" xmlns:fx="http://javafx.com/fxml/1" fx:controller="application.MainController">
<children>
<TextField fx:id="txtInput" layoutX="137.0" layoutY="96.0" text="Text Field" />
<Button fx:id="button1" layoutX="184.0" layoutY="131.0" mnemonicParsing="false" onAction="#handle" text="Button" />
<TextArea fx:id="txtResult" layoutX="134.0" layoutY="176.0" prefheight="90.0" prefWidth="174.0" text="Text Area" />
<Label fx:id="label1" layoutX="182.0" layoutY="65.0" text="Enter a ship name" />
</children>
</AnchorPane>
*注意:您看到的注释是我编写的代码,用它们替换了其他代码,以防万一它可以工作但仍然无法解决。
*注意:Main类在应用程序包中,MainController在application.controller包中,Fleet类在application.model包中
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)