Я пишу музыкальный плеер, и я не могу связать свой наблюдаемый массив с TableView, определенный в контроллере. Когда проект запущен, я получаю NullPointerException в строке под комментарием. Я не знаю, что это делает, и как найти путь вокруг этой проблемы.JavaFX - невозможно связать контроллер с массивом данных
Main.java
import javafx.application.Application;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.fxml.FXMLLoader;
import javafx.scene.Scene;
import javafx.scene.control.SplitPane;
import javafx.stage.Stage;
public class Main extends Application {
ObservableList<CModel> modelData = FXCollections.observableArrayList();
@Override
public void start(Stage primaryStage) {
try {
FXMLLoader loader = new FXMLLoader();
SplitPane root = FXMLLoader.load(getClass().getResource("Player.fxml"));
Scene scene = new Scene(root);
scene.getStylesheets().add(getClass().getResource("application.css").toExternalForm());
primaryStage.setScene(scene);
PlayerController controller = loader.getController();
//this line gives exception
controller.setData(this);
primaryStage.show();
} catch(Exception e) {
e.printStackTrace();
}
}
public ObservableList<CModel> getPersonData() {
return modelData;
}
public static void main(String[] args) {
launch(args);
}
}
PlayerController.java
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.scene.control.Menu;
import javafx.scene.control.TableColumn;
import javafx.scene.control.TableView;
import javafx.scene.control.cell.PropertyValueFactory;
public class PlayerController {
@FXML
private TableView<CModel> cTable;
@FXML
private TableColumn<CModel, String> artCol;
@FXML
private TableColumn<CModel, String> albCol;
@FXML
private TableColumn<CModel, String> trNameCol;
@FXML
private TableColumn<CModel, String> trNoCol;
@FXML
private TableColumn<CModel, String> durCol;
@FXML
private Menu addFile;
@FXML
private Menu addFolder;
@FXML
private Menu savePlayL;
@FXML
private Menu loadPlayL;
private Files files;
private Main main;
public PlayerController() {
}
@FXML
private void initialize() {
artCol.setCellValueFactory(
new PropertyValueFactory<CModel,String>("artistName")
);
albCol.setCellValueFactory(
new PropertyValueFactory<CModel,String>("albumName")
);
trNameCol.setCellValueFactory(
new PropertyValueFactory<CModel,String>("trackName")
);
trNoCol.setCellValueFactory(
new PropertyValueFactory<CModel,String>("trackDurationName")
);
durCol.setCellValueFactory(
new PropertyValueFactory<CModel,String>("trackNumberName")
);
}
@FXML
protected void handleAddFile(ActionEvent event) {
files = new Files();
files.openFile();
}
public void setData(Main mainApp) {
this.main = mainApp;
cTable.setItems(main.getPersonData());
}
}
Я сделал то, что вы написали, и это не помогло. Тем не менее я получаю исключение null – regularmike
Я пропустил openStream, пожалуйста, проверьте его снова. Если мы не используем 'InputStream' в качестве параметра, он все равно будет ссылаться на статический метод – ItachiUchiha
Теперь он работает! Спасибо, Увы, что я не мог найти его в учебниках Oracle, это довольно важный аспект захвата на javafx. – regularmike