我一直在爲JavaFX中的學習做一個小應用程序。在應用程序中,我需要從主文件分別得到控制,所以我設計了這一點:FXMLLoader.getController()返回null無論如何
public class DiceObserver implements Observer {
FXMLLoader loader = new FXMLLoader(getClass().getResource("sample.fxml"));
public Controller controller = loader.<Controller>getController();
Dice ov;
public DiceObserver(Dice dice){
this.ov = dice;
}
public void update(Observable o, Object arg) {
int roll = ov.getLastValue().getRolledValue();
System.out.println(roll);
controller.updateBarChart(roll);
}
}
的FXML文件:
package sample;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.fxml.FXMLLoader;
import javafx.fxml.Initializable;
import javafx.scene.chart.BarChart;
import javafx.scene.chart.XYChart;
import javafx.scene.control.Button;
import javafx.scene.control.Slider;
import javafx.scene.control.TextField;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import java.io.IOException;
import java.net.URL;
import java.util.ResourceBundle;
public class Controller{
@FXML public TextField freqText;
@FXML public Slider freqSlider;
@FXML public Button startButton;
@FXML public Button endButton;
@FXML public BarChart rollChart;
@FXML public ImageView dicePic;
XYChart.Series s1 = new XYChart.Series<>();
XYChart.Series s2 = new XYChart.Series<>();
XYChart.Series s3 = new XYChart.Series<>();
XYChart.Series s4 = new XYChart.Series<>();
XYChart.Series s5 = new XYChart.Series<>();
XYChart.Series s6 = new XYChart.Series<>();
Image side1 = new Image("Dice_Side_1.png");
SimulationThread t = SimulationThread.getInstance();
public void startSimulation(ActionEvent event) { // start the simulation
t.start();
}
public void getNewFreqValue(ActionEvent event) {
freqText.setText(String.valueOf(freqSlider.getValue()));
}
public void stopSimulation(ActionEvent event) {
t.end();
}
public void updateBarChart(int diceRoll){
System.out.println(diceRoll);
int rollval = diceRoll;
switch (rollval) {
case 1:
s1.getData().add(rollval);
break;
case 2:
s2.getData().add(rollval);
break;
case 3:
s3.getData().add(rollval);
break;
case 4:
s4.getData().add(rollval);
break;
case 5:
s5.getData().add(rollval);
break;
case 6:
s6.getData().add(rollval);
break;
}
}
public void updateDicePic(int diceRoll){
dicePic.setImage(side1);
}
public void initialize() {
}
}
的updateBarChart
方法是在控制器中。當我運行代碼時,加載器有一個值,但getcontroller
方法返回null。我怎樣才能解決這個問題?