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

Не бросаю попытки разобраться с 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
23.06.2017, 08:37
    #39476545
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Exception in thread "JavaFX Application Thread" java.lang.NullPointerException - JavaFX
Логируйте и смотрите весь stacktrace, а не только текст исключения.
Отложите в сторонку JavaFX и займитесь изучением Java. NullPointerException и InvocationTargetException это вполне конкретные исключения с конкретными причинами. Нужно уметь их анализировать и исправлять, а не каждый раз спрашивать на форуме, что в этой куче кода может быть не так.

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

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


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