Я создаю проект javafx, в котором я столкнулся с некоторыми проблемами, перечисленными ниже.Invocation target Исключение в Construtor - JavaFx
Во-первых, я получаю NullPointerException, когда я не был инициализацией 2 класса в конструкторе sfc = new ServerFrameController();
& sf = new ServerFrame();
.Even после поиска в течение нескольких часов, я не был в состоянии выяснить причину для исключения нулевого указателя. Тогда я подумал, что, возможно, инициализация классов может помочь. Но после добавления этих двух строк я получаю InvocationTargetException
. Пожалуйста помоги!!
Исключение:
Exception in Application constructor
java.lang.reflect.InvocationTargetException
Caused by: java.lang.StackOverflowError
at com.socket.ServerFrameController.<init>(ServerFrameController.java:35)
at com.socket.ServerFrame.<init>(ServerFrame.java:28)
Класс 1:
public class ServerFrame extends Application {
public ServerFrameController sfc;
public SocketServer server;
public Thread serverThread;
public String filePath = "D:\\Data.xml";
public JFileChooser fileChooser;
public JFXPanel fxPanel;
public ServerFrame() {
sfc = new ServerFrameController();
fxPanel = new JFXPanel();
fxPanel.setVisible(true);
fileChooser = new JFileChooser();
}
// Some More Code.....
}
Класс 2:
public class ServerFrameController implements Initializable {
ServerFrame sf;
@FXML
public TextField jTextField3;
@FXML
public Button jButton2;
@FXML
public Button jButton1;
@FXML
public TextArea jTextArea1;
public ServerFrameController() {
sf = new ServerFrame();
}
}
Ваш 'ServerFrameController' вызывает' ServerFrame', который снова вызывает 'ServerFrameController'. Ваш 'ServerFrameController' должен получить ваш аргумент' ServerFrame'. – aribeiro
Я не очень хорошо знаком с JavaFX, поэтому я пишу только комментарий вместо ответа. При создании экземпляра «ServerFrame» это создает также «ServerFrameController», который, в свою очередь, создает «ServerFrame», который ... У вас есть смысл. Это приводит к 'StackOverflowError'. Я предполагаю, что вы хотите иметь конструктор 'ServerFramController (ServerFrame sf) {this.sf = sf; ...} 'и вызов в конструкторе ServerFrame:' sfc = new ServerFrameController (this) '. – Seelenvirtuose
Почему вы создаете экземпляр контроллера вообще? Обычно экземпляры контроллера создаются для вас с помощью «FXMLLoader» при загрузке файла FXML. –