powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Exception in thread "JavaFX Application Thread" java.lang.NullPointerException - JavaFX
5 сообщений из 5, страница 1 из 1
Exception in thread "JavaFX Application Thread" java.lang.NullPointerException - JavaFX
    #39476508
K_West
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброго времени суток, уважаемые форумчане и форумчанки!

Не бросаю попытки разобраться с JavaFX на примере реализации WebBrowser.
Казалось бы, что вроде дело пошло, браузер работает, но есть проблема:

- при попытке создание новой Tab на TabPanel выбрасывается exception: Exception in thread "JavaFX Application Thread" java.lang.NullPointerException (ниже в консоли указаны строки, в которых возникает null), но Tab создается:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
private WebEngine engine;
@FXML
private TextField addressBar;

@FXML
private WebView web;

@FXML
private Tab tab;

@Override
    public void initialize(URL location, ResourceBundle resources) {
        try {
            sqlConnector = new SQLConnector();
        } catch (SQLException | ClassNotFoundException e) {
            e.printStackTrace();
        }

        engine = web.getEngine();
        engine.load(htLink + "www.google.com.ua");
        initListeners();
    }

    public void initListeners() {
        engine.getLoadWorker().stateProperty().addListener(new ChangeListener<Worker.State>() {     //эта строка 
            @Override
            public void changed(ObservableValue ov, Worker.State oldState, Worker.State newState) {     //и эта строка
                if (newState == Worker.State.SUCCEEDED) {
                    addressBar.setText(engine.getLocation());
                    tab.setText(engine.getTitle());
                }
            }
        });
    }



Новую Tab добавляю на TabPane следующим образом:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
public void newTab() {
        try {
            Node node = FXMLLoader.load(getClass().getResource("TabProp.fxml"));
            Tab tab1 = new Tab();
            tab1.setContent(node);
            tab1.setClosable(true);
            tab1.setId("tab");
            tabPane.getTabs().add(tab1);
            tabPane.getSelectionModel().select(tab1);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }



TabProp.fxml
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
<AnchorPane xmlns="http://javafx.com/javafx/8.0.111" xmlns:fx="http://javafx.com/fxml/1" fx:controller="sample.ControllerTab"
            minHeight="0.0" minWidth="0.0" prefHeight="156.0" prefWidth="299.0">
    <children>
        <ToolBar fx:id="toolBar" prefHeight="54.0" prefWidth="800.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0">
            <items>
                <Button mnemonicParsing="false" onAction="#goToPreviousPage" text="&#8656;" />
                <TextField fx:id="addressBar" onAction="#onEnter" prefHeight="38.0" prefWidth="592.0" />
                <Button mnemonicParsing="false" onAction="#go" text="Go" />
                <Button mnemonicParsing="false" onAction="#refreshPage" text="&#9851;" />
            </items>
        </ToolBar>
        <WebView fx:id="web" layoutY="54.0" prefHeight="462.0" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="56.0" />
    </children>
</AnchorPane>



Похожий Exception (Exception in thread "JavaFX Application Thread" java.lang.RuntimeException: java.lang.reflect.InvocationTargetException) получаю при попытке вызвать новое окно через MenuItem в MenuBar. Но в этом случае окно не создается:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
@FXML
private TableView<Bookmark> table;

public void showBookmarks() {
        table.itemsProperty().setValue(listBookmarks);     //Caused by: java.lang.NullPointerException at //sample.Controller.showBookmarks
        table.setRowFactory(new Callback<TableView<Bookmark>, TableRow<Bookmark>>() {
        @Override
            public TableRow<Bookmark> call(TableView<Bookmark> param) {
                TableRow<Bookmark> row = new TableRow<>();
                ContextMenu contextMenu = new ContextMenu();
                MenuItem goMenuItem = new MenuItem();
                MenuItem deleteMenuItem = new MenuItem();
                MenuItem editMenuItem = new MenuItem();        
         //продолжение кода



Так выглядит, что я концептуально что-то делаю не так, подскажите, пожалуйста, на что обратить внимание, чтобы избежать / исправить данные exceptions.

Спасибо!
...
Рейтинг: 0 / 0
Exception in thread "JavaFX Application Thread" java.lang.NullPointerException - JavaFX
    #39476545
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Логируйте и смотрите весь stacktrace, а не только текст исключения.
Отложите в сторонку JavaFX и займитесь изучением Java. NullPointerException и InvocationTargetException это вполне конкретные исключения с конкретными причинами. Нужно уметь их анализировать и исправлять, а не каждый раз спрашивать на форуме, что в этой куче кода может быть не так.

NullPointerException не может возникать сразу в двух строках. Что-то вы не так анализируете.
...
Рейтинг: 0 / 0
Exception in thread "JavaFX Application Thread" java.lang.NullPointerException - JavaFX
    #39476636
K_West
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Blazkowicz, спасибо за совет. Дело в том, что я понимаю, что такое NullPointerException и как с ним жить, но не могу понять, почему оно здесь возникает. Создается такое впечатление, что JavaFX по кругу вызывает метод initialize() и заново инициализирует экземпляры классов и, поскольку, это новое окно, то некоторый экземпляры класса остаются null.
Буду копАть дальше =)
...
Рейтинг: 0 / 0
Exception in thread "JavaFX Application Thread" java.lang.NullPointerException - JavaFX
    #39476644
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
K_West Дело в том, что я понимаю, что такое NullPointerException и как с ним жить, но не могу понять, почему оно здесь возникает.
Кокнкретезируйте своё "здесь". И конкретизация это не номер строки. А метод, который вернул null, когда вы ожидали объект. Потому что когда вы пишете что оно у вас возникает в "той строке" и "вот в этой". Понимания NPE не видно совершенно. А когда вы узнаете метод, то вы сможете почитать в документации или исходном коде почему он возвращает null. Это не JavaFX возвращает null. А конкретный метод, конкретного класса.

И там где у вас возникает VPN стоит срочно провести рефакторинг introduce variable, чтобы номер строки в stacktrace точно указывал на проблемную переменную, а не на все 3-4 объекта что у вы ожидаете.
...
Рейтинг: 0 / 0
Exception in thread "JavaFX Application Thread" java.lang.NullPointerException - JavaFX
    #39476668
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlazkowiczИ там где у вас возникает VPN...
Это ещё как получилось? NPE же.
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Exception in thread "JavaFX Application Thread" java.lang.NullPointerException - JavaFX
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]