我在寫一個音樂播放器,並且無法將我的可觀察陣列與控制器中定義的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());
}
}
我做了你寫的,它沒有幫助。仍然我得到空例外 – regularmike 2014-09-22 12:27:14
我錯過了openStream,請再次檢查。如果我們不使用'InputStream'作爲參數,它仍然會引用靜態方法 – ItachiUchiha 2014-09-22 12:42:49
現在,它的工作原理!謝謝,驚訝的是我在Oracle教程中找不到它,這是抓住javafx的一個非常重要的方面。 – regularmike 2014-09-22 17:08:34