w kontrolerze mam napisaną funkcję run która działa w tle programu, w pliku aplikacja wywołuję funkcję która powinna wywoływać się co 5 sekund, funkcja się wywołuje lecz z niewiadomych przyczyn pokazuje mi błąd
java.lang.NullPointerException: Cannot invoke "javafx.scene.layout.VBox.getChildren()" because "this.vBoxMessages" is null
gdzie mogę szukać błędu?
kontroler
@Override
public void run()
{
while(true)
{
try
{
System.out.println("proba odczytania wiadomosci");
pobierz_ostatnie_wiadomosci();
Thread.sleep(5000);
}
catch(Exception e)
{
}
}
}
wywołanie mojej funkcji
@Override
public void start(Stage primaryStage) throws Exception{
/// odwiezanie s=new odwiezanie();
// s.start();
kontrolerGlowny n=new kontrolerGlowny();
n.start();
stg = primaryStage;
primaryStage.setResizable(false);
Parent root = FXMLLoader.load(getClass().getResource("start.fxml"));
primaryStage.setTitle("Chat A&M");
primaryStage.setScene(new Scene(root, 1000, 600));
primaryStage.show();
}
funkcja która powinna wywoływać się co 5 sekund
public void pobierz_ostatnie_wiadomosci()//pobranie ostatnich wiadomosci
{
try {
Scanner odczyt = new Scanner(new File("user.txt"));
String nadawca = odczyt.nextLine();
Scanner odczyt2 = new Scanner(new File("user2.txt"));
String odbiorca = odczyt2.nextLine();
Class.forName("com.mysql.cj.jdbc.Driver");
Connection connection = DriverManager.getConnection(url, username, password);
Statement statement = connection.createStatement();
ResultSet resultSet = statement.executeQuery("select * from wiadomosci where id >'"+ostatnia_wiadomosc+"' AND (nadawca = '"+nadawca+"' and odbiorca = '"+odbiorca+"'|| nadawca = '"+odbiorca+"' and odbiorca = '"+nadawca+"')");
while (resultSet.next()) {
HBox hBox = new HBox();
Text user = new Text(resultSet.getString("nadawca"));
hBox.setPadding(new Insets(5, 5, 5, 10));
Text text = new Text(resultSet.getString("wiadomosc"));
TextFlow textFlow = new TextFlow(text);
if(resultSet.getString("nadawca").equals(nadawca))
{
// System.out.println("wykonanie");
hBox.setAlignment(Pos.CENTER_RIGHT);
textFlow.setStyle(
"-fx-font-size:15px;"+
"-fx-color: rgb(239, 242, 255);" +
"-fx-background-color: rgb(15, 125, 242);" +
"-fx-background-radius: 20px;");
}
else
{
hBox.setAlignment(Pos.CENTER_LEFT);
textFlow.setStyle("-fx-font-size:15px;"+
"-fx-background-color: rgb(233, 233, 235);" +
"-fx-background-radius: 20px;");
}
textFlow.setPadding(new Insets(5, 10, 5, 10));
hBox.getChildren().add(textFlow);
vBoxMessages.getChildren().add(hBox);
ostatnia_wiadomosc= Integer.parseInt(resultSet.getString("id"));
}
connection.close();
}
catch(Exception e)
{
System.out.println(e);
}
}