2015-02-06 3 views
0

Добрый вечер, ребята,JavaFX: java.lang.NullPointerException при попытке изменить размер borderpane

Я еще в самом начале программирования Java. Моя текущая цель - изменить размер верхней части BorderPane во время запуска инициализации. Конечно, было бы очень полезно иметь отдельный класс, который содержит статические константы (например, значение для размера).

К сожалению, я всегда получаю исключение NullPointerException. Я считаю, что это действительно просто, чего я не вижу. Надеюсь, ты поможешь мне.

Большое спасибо!

package main; 

import javafx.application.Application; 
import javafx.stage.Stage; 
import javafx.scene.Scene; 
import javafx.scene.layout.BorderPane; 
import javafx.scene.layout.Pane; 
import javafx.scene.layout.Region; 
import javafx.fxml.FXML; 
import javafx.fxml.FXMLLoader; 


public class Main extends Application { 

@FXML 
Pane main_top; 

@Override 
public void start(Stage primaryStage) { 
    try { 
     BorderPane root = (BorderPane)FXMLLoader.load(getClass().getResource("MainGui.fxml")); 
     Scene scene = new Scene(root,400,400); 
     scene.getStylesheets().add(getClass().getResource("application.css").toExternalForm()); 
     primaryStage.setScene(scene); 
     primaryStage.show(); 
     primaryStage.setMaximized(true); 
     BorderPane.layoutInArea(main_top, 0, 0, 200, GlobalProperties.MainGuiTopPaneHeight, 0, null, false, false, null, null, false); 
    } catch(Exception e) { 
     e.printStackTrace(); 
    } 

} 

EDIT:

java.lang.NullPointerException 
at javafx.scene.layout.Region.layoutInArea(Unknown Source) 
at main.Main.start(Main.java:27) 
at com.sun.javafx.application.LauncherImpl.lambda$launchApplication1$153(Unknown Source) 
at com.sun.javafx.application.LauncherImpl$$Lambda$51/2117598489.run(Unknown Source) 
at com.sun.javafx.application.PlatformImpl.lambda$runAndWait$166(Unknown Source) 
at com.sun.javafx.application.PlatformImpl$$Lambda$44/1051754451.run(Unknown Source) 
at com.sun.javafx.application.PlatformImpl.lambda$null$164(Unknown Source) 
at com.sun.javafx.application.PlatformImpl$$Lambda$47/1401292544.run(Unknown Source) 
at java.security.AccessController.doPrivileged(Native Method) 
at com.sun.javafx.application.PlatformImpl.lambda$runLater$165(Unknown Source) 
at com.sun.javafx.application.PlatformImpl$$Lambda$46/1775282465.run(Unknown Source) 
at com.sun.glass.ui.InvokeLaterDispatcher$Future.run(Unknown Source) 
at com.sun.glass.ui.win.WinApplication._runLoop(Native Method) 
at com.sun.glass.ui.win.WinApplication.lambda$null$141(Unknown Source) 
at com.sun.glass.ui.win.WinApplication$$Lambda$37/1109371569.run(Unknown Source) 
at java.lang.Thread.run(Unknown Source) 

EDIT2 (MainGui.fxml):

<?xml version="1.0" encoding="UTF-8"?> 
 

 
<?import javafx.scene.control.*?> 
 
<?import java.lang.*?> 
 
<?import javafx.scene.layout.*?> 
 
<?import javafx.scene.layout.BorderPane?> 
 

 
<BorderPane xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1" fx:controller="main.MainGuiController"> 
 
    <top> 
 
     <Pane fx:id="main_top" prefHeight="200.0" prefWidth="200.0" style="-fx-background-color: #525260;" BorderPane.alignment="CENTER" /> 
 
    </top> 
 
    <left> 
 
     <Pane fx:id="main_left" prefHeight="200.0" prefWidth="200.0" style="-fx-background-color: #525252;" BorderPane.alignment="CENTER" /> 
 
    </left> 
 
    <center> 
 
     <Pane fx:id="main_center" prefHeight="200.0" prefWidth="200.0" BorderPane.alignment="CENTER" /> 
 
    </center> 
 
    <right> 
 
     <Pane fx:id="main_right" prefHeight="200.0" prefWidth="200.0" style="-fx-background-color: #525252;" BorderPane.alignment="CENTER" /> 
 
    </right> 
 
    <bottom> 
 
     <Pane fx:id="main_bottom" prefHeight="200.0" prefWidth="200.0" style="-fx-background-color: #525260;" BorderPane.alignment="CENTER" /> 
 
    </bottom> 
 
</BorderPane>

+1

Пожалуйста, публикуйте полную Stacktrace вашего Exception или MCVE (http://stackoverflow.com/help/mcve). – eckig

+0

Спасибо, eckig, я забыл вставить его ;-) – n3wton

+1

Это не MCVE. Все, что вы получаете от вашего примера, это то, что main_top никогда не инициализировался и, следовательно, вы получили исключение Nullpointer. – Roland

ответ

0

Наконец, после нескольких дней проб и ошибок, я нашел решение. Теперь, после его решения, это выглядит довольно легко ;-)

Все, что мне нужно было сделать, это добавить интерфейс инициализации контроллера в контроллер.

package main; 

import java.net.URL; 
import java.util.ResourceBundle; 

import javafx.fxml.FXML; 
import javafx.fxml.Initializable; 
import javafx.scene.control.Button; 
import javafx.scene.layout.Pane; 


public class MainGuiController implements Initializable{ 

//***** @author n3wton 

//**** FXML declarations for MainGui.fxml 
@FXML 
private Pane main_top; 
@FXML 
private Button button1; 

//***** Beginning of auto-initialized method 
@Override 
public void initialize(URL arg0, ResourceBundle arg1) { 

    button1.setPrefSize(1, 1); 
    main_top.setPrefSize(50, 10); 

    } 
} 
Смежные вопросы