Hallo!
Ich bin im Rahmen eines privaten Projekts auf folgendes Problem gestoßen:
Immer wenn ich folgenden Command absetze, wird eine Exception geworfen.
[CODE lang="java" title="Problematischer Code" highlight="13"] Bestellposition[] bp= controller.getBestellungen();//gefüllt und nicht null
for (Bestellposition bpos : bp)
{
bpList.add(bpos);//objekt gefüllt und nicht null
System.out.println("ID" + bpos.getRid() + " Tisch: " + bpos.getTableno() + " DRINK: " + bpos.getDrink());
}
// System.out.println(bpList.get(1));//null ?????????????????????????????????????????
//BP ist gefüllt
//aber sobald es auf ObservableArray übertragen wird: collecting data
if(bpList != null)
{
//wie kann eine Nullpointerexception auftreten wenn ich !=null abfange?
listBPos.setItems(FXCollections.observableList(bpList));
//listBPos.getItems().setAll(bpList); //hier gehts schief
}[/CODE]
Ich arbeite in Gradle. Meine Oberfläche startet, sobald ich den problematischen Code in Zeile 13 auskommentiere.
Die Datenerhebung funktioniert einwandfrei. Durch einen Sysout in den entsprechenden Methoden zur generieren der benötigten Collections weiss ich, dass die returnten Listen nicht leer sind. Auch das Debugging beweist, dass die Listen gefüllt sind und es einen anderen Grund für die NullPointerException geben muss.
[CODE lang="java" title="Gradle Built"]plugins {
id 'java'
id 'application'
id 'org.openjfx.javafxplugin' version '0.0.9'
}
mainClassName='newP.BKPR'
group 'example.org'
version '1.0-SNAPSHOT'
sourceCompatibility = 1.8
repositories {
mavenCentral()
}
javafx {
version = "15.0.1"
modules = [ 'javafx.controls', 'javafx.fxml' ]
}
//"javafx.graphics"
sourceSets {
main {
resources {
srcDirs = ["src/main/java"]
includes = ["**/*.fxml"]
}
}
}
dependencies {
testCompile group: 'junit', name: 'junit', version: '4.12'
compile group: 'com.google.code.gson', name: 'gson', version: '2.8.5'
compile group: 'com.fasterxml.jackson.core', name: 'jackson-core', version: '2.8.8'
compile group: 'com.fasterxml.jackson.core', name: 'jackson-annotations', version: '2.8.8'
compile group: 'com.fasterxml.jackson.core', name: 'jackson-databind', version: '2.8.8'
compile 'com.squareup.okhttp
khttp:2.5.0'
compile 'javax.mail:mail:1.4.7'
}
[/CODE]
Hier meine FXML
[CODE lang="java" title="FXML-Code"]<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.scene.control.Button?>
<?import javafx.scene.control.Label?>
<?import javafx.scene.control.ListView?>
<?import javafx.scene.control.Menu?>
<?import javafx.scene.control.MenuBar?>
<?import javafx.scene.control.MenuItem?>
<?import javafx.scene.layout.AnchorPane?>
<!--xmlns="http://javafx.com/javafx/8.0.141" -->
<AnchorPane prefHeight="496.0" prefWidth="796.0" style="-fx-background-color: lightblue;" xmlns="http://javafx.com/javafx/8.0.141" xmlns:fx="http://javafx.com/fxml/1" fx:controller="newP.BKPR">
<children>
<Label fx:id="lblOutput" layoutX="91.0" layoutY="129.0" prefHeight="17.0" prefWidth="118.0" />
<Button layoutX="646.0" layoutY="29.0" mnemonicParsing="false" text="Say Hello" />
<ListView fx:id="listBPos" layoutX="25.0" layoutY="84.0" prefHeight="298.0" prefWidth="249.0" />
<ListView fx:id="listMPos" layoutX="293.0" layoutY="84.0" prefHeight="298.0" prefWidth="242.0" />
<MenuBar layoutY="2.0">
<menus>
<Menu mnemonicParsing="false" text="File">
<items>
<MenuItem mnemonicParsing="false" text="Close" />
</items>
</Menu>
<Menu mnemonicParsing="false" text="Edit">
<items>
<MenuItem mnemonicParsing="false" text="Delete" />
</items>
</Menu>
<Menu mnemonicParsing="false" text="Help">
<items>
<MenuItem mnemonicParsing="false" text="About" />
</items>
</Menu>
</menus>
</MenuBar>
</children>
</AnchorPane>
[/CODE]
[CODE lang="java" title="Oberflächencontroller"]package newP;
import javafx.application.Application;
import javafx.beans.InvalidationListener;
import javafx.collections.FXCollections;
import javafx.collections.ListChangeListener;
import javafx.collections.ObservableList;
import javafx.fxml.FXML;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.scene.control.Label;
import javafx.scene.control.ListView;
import javafx.stage.Stage;
import javax.mail.MessagingException;
import java.io.IOException;
import java.util.Collection;
import java.util.Iterator;
import java.util.List;
import java.util.ListIterator;
public class BKPR extends Application {
@FXML
private Label lblOutput;
@FXML
private ListView<Bestellposition> listBPos;
@FXML
private ListView<Mailobject> listMPos;
private Controller controller;
public static void main(String[] args) {
launch(args);
}
@Override
public void start(Stage primaryStage) throws IOException, MessagingException, InterruptedException {
controller = new Controller();
Parent root = FXMLLoader.load(getClass().getResource("BKPR.fxml"));
Scene scene = new Scene(root, 800, 600);
primaryStage.setTitle("FXML Welcome");
primaryStage.setScene(scene);
primaryStage.show();
listenLaden();
}
public void listenLaden() throws IOException, InterruptedException, MessagingException {
//Für Bestellpositionen
ObservableList<Bestellposition> bpList = new ObservableList<Bestellposition>() {
@Override
public void addListener(ListChangeListener<? super Bestellposition> listChangeListener) {
}
@Override
public void removeListener(ListChangeListener<? super Bestellposition> listChangeListener) {
}
@Override
public boolean addAll(Bestellposition... bestellpositions) {
return false;
}
@Override
public boolean setAll(Bestellposition... bestellpositions) {
return false;
}
@Override
public boolean setAll(Collection<? extends Bestellposition> collection) {
return false;
}
@Override
public boolean removeAll(Bestellposition... bestellpositions) {
return false;
}
@Override
public boolean retainAll(Bestellposition... bestellpositions) {
return false;
}
@Override
public void remove(int i, int i1) {
}
@Override
public int size() {
return 0;
}
@Override
public boolean isEmpty() {
return false;
}
@Override
public boolean contains(Object o) {
return false;
}
@Override
public Iterator<Bestellposition> iterator() {
return null;
}
@Override
public Object[] toArray() {
return new Object[0];
}
@Override
public <T> T[] toArray(T[] ts) {
return null;
}
@Override
public boolean add(Bestellposition bestellposition) {
return false;
}
@Override
public boolean remove(Object o) {
return false;
}
@Override
public boolean containsAll(Collection<?> collection) {
return false;
}
@Override
public boolean addAll(Collection<? extends Bestellposition> collection) {
return false;
}
@Override
public boolean addAll(int i, Collection<? extends Bestellposition> collection) {
return false;
}
@Override
public boolean removeAll(Collection<?> collection) {
return false;
}
@Override
public boolean retainAll(Collection<?> collection) {
return false;
}
@Override
public void clear() {
}
@Override
public Bestellposition get(int i) {
return null;
}
@Override
public Bestellposition set(int i, Bestellposition bestellposition) {
return null;
}
@Override
public void add(int i, Bestellposition bestellposition) {
}
@Override
public Bestellposition remove(int i) {
return null;
}
@Override
public int indexOf(Object o) {
return 0;
}
@Override
public int lastIndexOf(Object o) {
return 0;
}
@Override
public ListIterator<Bestellposition> listIterator() {
return null;
}
@Override
public ListIterator<Bestellposition> listIterator(int i) {
return null;
}
@Override
public List<Bestellposition> subList(int i, int i1) {
return null;
}
@Override
public void addListener(InvalidationListener invalidationListener) {
}
@Override
public void removeListener(InvalidationListener invalidationListener) {
}
};
ObservableList<Bestellposition> emptyList= new ObservableList<Bestellposition>() {
@Override
public void addListener(ListChangeListener<? super Bestellposition> listChangeListener) {
}
@Override
public void removeListener(ListChangeListener<? super Bestellposition> listChangeListener) {
}
@Override
public boolean addAll(Bestellposition... bestellpositions) {
return false;
}
@Override
public boolean setAll(Bestellposition... bestellpositions) {
return false;
}
@Override
public boolean setAll(Collection<? extends Bestellposition> collection) {
return false;
}
@Override
public boolean removeAll(Bestellposition... bestellpositions) {
return false;
}
@Override
public boolean retainAll(Bestellposition... bestellpositions) {
return false;
}
@Override
public void remove(int i, int i1) {
}
@Override
public int size() {
return 0;
}
@Override
public boolean isEmpty() {
return false;
}
@Override
public boolean contains(Object o) {
return false;
}
@Override
public Iterator<Bestellposition> iterator() {
return null;
}
@Override
public Object[] toArray() {
return new Object[0];
}
@Override
public <T> T[] toArray(T[] ts) {
return null;
}
@Override
public boolean add(Bestellposition bestellposition) {
return false;
}
@Override
public boolean remove(Object o) {
return false;
}
@Override
public boolean containsAll(Collection<?> collection) {
return false;
}
@Override
public boolean addAll(Collection<? extends Bestellposition> collection) {
return false;
}
@Override
public boolean addAll(int i, Collection<? extends Bestellposition> collection) {
return false;
}
@Override
public boolean removeAll(Collection<?> collection) {
return false;
}
@Override
public boolean retainAll(Collection<?> collection) {
return false;
}
@Override
public void clear() {
}
@Override
public Bestellposition get(int i) {
return null;
}
@Override
public Bestellposition set(int i, Bestellposition bestellposition) {
return null;
}
@Override
public void add(int i, Bestellposition bestellposition) {
}
@Override
public Bestellposition remove(int i) {
return null;
}
@Override
public int indexOf(Object o) {
return 0;
}
@Override
public int lastIndexOf(Object o) {
return 0;
}
@Override
public ListIterator<Bestellposition> listIterator() {
return null;
}
@Override
public ListIterator<Bestellposition> listIterator(int i) {
return null;
}
@Override
public List<Bestellposition> subList(int i, int i1) {
return null;
}
@Override
public void addListener(InvalidationListener invalidationListener) {
}
@Override
public void removeListener(InvalidationListener invalidationListener) {
}
};
Bestellposition leereBPos = new Bestellposition();
leereBPos.setName("keine Bestellungen verfügbar");
//Für Mails
ObservableList<Mailobject> mlList = new ObservableList<Mailobject>() {
@Override
public void addListener(ListChangeListener<? super Mailobject> listChangeListener) {
}
@Override
public void removeListener(ListChangeListener<? super Mailobject> listChangeListener) {
}
@Override
public boolean addAll(Mailobject... mailobjects) {
return false;
}
@Override
public boolean setAll(Mailobject... mailobjects) {
return false;
}
@Override
public boolean setAll(Collection<? extends Mailobject> collection) {
return false;
}
@Override
public boolean removeAll(Mailobject... mailobjects) {
return false;
}
@Override
public boolean retainAll(Mailobject... mailobjects) {
return false;
}
@Override
public void remove(int i, int i1) {
}
@Override
public int size() {
return 0;
}
@Override
public boolean isEmpty() {
return false;
}
@Override
public boolean contains(Object o) {
return false;
}
@Override
public Iterator<Mailobject> iterator() {
return null;
}
@Override
public Object[] toArray() {
return new Object[0];
}
@Override
public <T> T[] toArray(T[] ts) {
return null;
}
@Override
public boolean add(Mailobject mailobject) {
return false;
}
@Override
public boolean remove(Object o) {
return false;
}
@Override
public boolean containsAll(Collection<?> collection) {
return false;
}
@Override
public boolean addAll(Collection<? extends Mailobject> collection) {
return false;
}
@Override
public boolean addAll(int i, Collection<? extends Mailobject> collection) {
return false;
}
@Override
public boolean removeAll(Collection<?> collection) {
return false;
}
@Override
public boolean retainAll(Collection<?> collection) {
return false;
}
@Override
public void clear() {
}
@Override
public Mailobject get(int i) {
return null;
}
@Override
public Mailobject set(int i, Mailobject mailobject) {
return null;
}
@Override
public void add(int i, Mailobject mailobject) {
}
@Override
public Mailobject remove(int i) {
return null;
}
@Override
public int indexOf(Object o) {
return 0;
}
@Override
public int lastIndexOf(Object o) {
return 0;
}
@Override
public ListIterator<Mailobject> listIterator() {
return null;
}
@Override
public ListIterator<Mailobject> listIterator(int i) {
return null;
}
@Override
public List<Mailobject> subList(int i, int i1) {
return null;
}
@Override
public void addListener(InvalidationListener invalidationListener) {
}
@Override
public void removeListener(InvalidationListener invalidationListener) {
}
};
ObservableList<Mailobject>emptyMList = new ObservableList<Mailobject>() {
@Override
public void addListener(ListChangeListener<? super Mailobject> listChangeListener) {
}
@Override
public void removeListener(ListChangeListener<? super Mailobject> listChangeListener) {
}
@Override
public boolean addAll(Mailobject... mailobjects) {
return false;
}
@Override
public boolean setAll(Mailobject... mailobjects) {
return false;
}
@Override
public boolean setAll(Collection<? extends Mailobject> collection) {
return false;
}
@Override
public boolean removeAll(Mailobject... mailobjects) {
return false;
}
@Override
public boolean retainAll(Mailobject... mailobjects) {
return false;
}
@Override
public void remove(int i, int i1) {
}
@Override
public int size() {
return 0;
}
@Override
public boolean isEmpty() {
return false;
}
@Override
public boolean contains(Object o) {
return false;
}
@Override
public Iterator<Mailobject> iterator() {
return null;
}
@Override
public Object[] toArray() {
return new Object[0];
}
@Override
public <T> T[] toArray(T[] ts) {
return null;
}
@Override
public boolean add(Mailobject mailobject) {
return false;
}
@Override
public boolean remove(Object o) {
return false;
}
@Override
public boolean containsAll(Collection<?> collection) {
return false;
}
@Override
public boolean addAll(Collection<? extends Mailobject> collection) {
return false;
}
@Override
public boolean addAll(int i, Collection<? extends Mailobject> collection) {
return false;
}
@Override
public boolean removeAll(Collection<?> collection) {
return false;
}
@Override
public boolean retainAll(Collection<?> collection) {
return false;
}
@Override
public void clear() {
}
@Override
public Mailobject get(int i) {
return null;
}
@Override
public Mailobject set(int i, Mailobject mailobject) {
return null;
}
@Override
public void add(int i, Mailobject mailobject) {
}
@Override
public Mailobject remove(int i) {
return null;
}
@Override
public int indexOf(Object o) {
return 0;
}
@Override
public int lastIndexOf(Object o) {
return 0;
}
@Override
public ListIterator<Mailobject> listIterator() {
return null;
}
@Override
public ListIterator<Mailobject> listIterator(int i) {
return null;
}
@Override
public List<Mailobject> subList(int i, int i1) {
return null;
}
@Override
public void addListener(InvalidationListener invalidationListener) {
}
@Override
public void removeListener(InvalidationListener invalidationListener) {
}
};
Mailobject emptyMo = new Mailobject();
emptyMo.setSender("Keine Mails vorhanden");
emptyMList.add(emptyMo);
System.out.println("BPOSumsetzung");
//BPOS umsetzung bpList
Bestellposition[] bp= controller.getBestellungen();//gefüllt und nicht null
for (Bestellposition bpos : bp)
{
bpList.add(bpos);//objekt gefüllt und nicht null
System.out.println("ID" + bpos.getRid() + " Tisch: " + bpos.getTableno() + " DRINK: " + bpos.getDrink());
}
// System.out.println(bpList.get(1));//null ?????????????????????????????????????????
//BP ist gefüllt
//aber sobald es auf ObservableArray übertragen wird: collecting data
if(bpList != null)
{
//wie kann eine Nullpointerexception auftreten wenn ich !=null abfange?
listBPos.setItems(FXCollections.observableList(bpList));
//listBPos.getItems().setAll(bpList); //hier gehts schief
}
else
{
//emptyList.add(leereBPos);
// listBPos.getItems().setAll(emptyList);
}
//Mailobjects umsetzung
System.out.println("MPosumsetzung");
mlList = controller.getMails();
if(mlList!=null)
{
System.out.println("test");
// listMPos.getItems().setAll(mlList); //hier gehts schief
// listMPos.setItems(mlList);
}
else
{
// listMPos.getItems().setAll(emptyMList);
}
}
}
[/CODE]
Ich bin alle Methoden zur befüllung der Listen durchgegangen und in keinem Fall sind sie leer oder unbefüllt. Die Daten erhalte ich von einem Node.js Server der auch über die gesamte Zeit läuft. (Ich erhalte die korrekten Daten vom Server)
Mein Problem bezieht sich also auf die Ausgabe im der ListView.
Ich bin ehrlich gesagt langsam schon etwas entmutigt. Ich sitze schon einige Tage an diesem Exception. Der Invoke steht nur für die hinten angestellte NullPointerException:
[CODE lang="java" title="Fehlerausgabe"]20:30:42: Executing task 'run'...
> Configure project :
Project : => no module-info.java found
> Task :compileJava
> Task
rocessResources UP-TO-DATE
> Task :classes
> Task :configJavafxRun
> Task :run
BPOSumsetzung
ID1mhc6nmh8kpqn1eg4 Tisch: 3 DRINK: BermudaRose
ID1mhc6nmh8kpqn1eg5 Tisch: 3 DRINK: Cosmopolitan
ID1mhc6nbm0kps4oiez Tisch: 7 DRINK: AprilShower
ID1mhc6nbm0kps4oif1 Tisch: 7 DRINK: BermudaRose
ID1mhc6nbxgkps6prm2 Tisch: 4 DRINK: CubaLibre
ID1mhc6nbxgkps6prm4 Tisch: 4 DRINK: BermudaRose
Exception in Application start method
java.lang.reflect.InvocationTargetException
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:566)
at javafx.graphics/com.sun.javafx.application.LauncherImpl.launchApplicationWithArgs(LauncherImpl.java:473)
at javafx.graphics/com.sun.javafx.application.LauncherImpl.launchApplication(LauncherImpl.java:372)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:566)
at java.base/sun.launcher.LauncherHelper$FXHelper.main(LauncherHelper.java:1051)
Caused by: java.lang.RuntimeException: Exception in Application start method
at javafx.graphics/com.sun.javafx.application.LauncherImpl.launchApplication1(LauncherImpl.java:973)
at javafx.graphics/com.sun.javafx.application.LauncherImpl.lambda$launchApplication$2(LauncherImpl.java:198)
at java.base/java.lang.Thread.run(Thread.java:834)
Caused by: java.lang.NullPointerException
at newP.BKPR.listenLaden(BKPR.java:739)
at newP.BKPR.start(BKPR.java:49)
at javafx.graphics/com.sun.javafx.application.LauncherImpl.lambda$launchApplication1$9(LauncherImpl.java:919)
at javafx.graphics/com.sun.javafx.application.PlatformImpl.lambda$runAndWait$11(PlatformImpl.java:449)
at javafx.graphics/com.sun.javafx.application.PlatformImpl.lambda$runLater$9(PlatformImpl.java:418)
at java.base/java.security.AccessController.doPrivileged(Native Method)
at javafx.graphics/com.sun.javafx.application.PlatformImpl.lambda$runLater$10(PlatformImpl.java:417)
at javafx.graphics/com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:96)
at javafx.graphics/com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
at javafx.graphics/com.sun.glass.ui.win.WinApplication.lambda$runLoop$3(WinApplication.java:175)
... 1 more
Exception running application newP.BKPR
> Task :run FAILED
FAILURE: Build failed with an exception.
* What went wrong:
Execution failed for task ':run'.
> Process 'command 'C:\Program Files\JetBrains\IntelliJ IDEA Community Edition 2019.2.4\jbr\bin\java.exe'' finished with non-zero exit value 1
* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.
* Get more help at https://help.gradle.org
BUILD FAILED in 5s
4 actionable tasks: 3 executed, 1 up-to-date
20:30:47: Task execution finished 'run'.
[/CODE]
Für jeden Tipp, Ratschlag oder Hinweis bin ich äußerst dankbar.
Der Code ist nicht 100% sauber, ich versuche momentan über evolutionäres Prototyping zu arbeiten.
Dementsprechend wird dieser nach erwiesener Funktionalität neu aufbereitet.
LG J
Ich bin im Rahmen eines privaten Projekts auf folgendes Problem gestoßen:
Immer wenn ich folgenden Command absetze, wird eine Exception geworfen.
[CODE lang="java" title="Problematischer Code" highlight="13"] Bestellposition[] bp= controller.getBestellungen();//gefüllt und nicht null
for (Bestellposition bpos : bp)
{
bpList.add(bpos);//objekt gefüllt und nicht null
System.out.println("ID" + bpos.getRid() + " Tisch: " + bpos.getTableno() + " DRINK: " + bpos.getDrink());
}
// System.out.println(bpList.get(1));//null ?????????????????????????????????????????
//BP ist gefüllt
//aber sobald es auf ObservableArray übertragen wird: collecting data
if(bpList != null)
{
//wie kann eine Nullpointerexception auftreten wenn ich !=null abfange?
listBPos.setItems(FXCollections.observableList(bpList));
//listBPos.getItems().setAll(bpList); //hier gehts schief
}[/CODE]
Ich arbeite in Gradle. Meine Oberfläche startet, sobald ich den problematischen Code in Zeile 13 auskommentiere.
Die Datenerhebung funktioniert einwandfrei. Durch einen Sysout in den entsprechenden Methoden zur generieren der benötigten Collections weiss ich, dass die returnten Listen nicht leer sind. Auch das Debugging beweist, dass die Listen gefüllt sind und es einen anderen Grund für die NullPointerException geben muss.
[CODE lang="java" title="Gradle Built"]plugins {
id 'java'
id 'application'
id 'org.openjfx.javafxplugin' version '0.0.9'
}
mainClassName='newP.BKPR'
group 'example.org'
version '1.0-SNAPSHOT'
sourceCompatibility = 1.8
repositories {
mavenCentral()
}
javafx {
version = "15.0.1"
modules = [ 'javafx.controls', 'javafx.fxml' ]
}
//"javafx.graphics"
sourceSets {
main {
resources {
srcDirs = ["src/main/java"]
includes = ["**/*.fxml"]
}
}
}
dependencies {
testCompile group: 'junit', name: 'junit', version: '4.12'
compile group: 'com.google.code.gson', name: 'gson', version: '2.8.5'
compile group: 'com.fasterxml.jackson.core', name: 'jackson-core', version: '2.8.8'
compile group: 'com.fasterxml.jackson.core', name: 'jackson-annotations', version: '2.8.8'
compile group: 'com.fasterxml.jackson.core', name: 'jackson-databind', version: '2.8.8'
compile 'com.squareup.okhttp
compile 'javax.mail:mail:1.4.7'
}
[/CODE]
Hier meine FXML
[CODE lang="java" title="FXML-Code"]<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.scene.control.Button?>
<?import javafx.scene.control.Label?>
<?import javafx.scene.control.ListView?>
<?import javafx.scene.control.Menu?>
<?import javafx.scene.control.MenuBar?>
<?import javafx.scene.control.MenuItem?>
<?import javafx.scene.layout.AnchorPane?>
<!--xmlns="http://javafx.com/javafx/8.0.141" -->
<AnchorPane prefHeight="496.0" prefWidth="796.0" style="-fx-background-color: lightblue;" xmlns="http://javafx.com/javafx/8.0.141" xmlns:fx="http://javafx.com/fxml/1" fx:controller="newP.BKPR">
<children>
<Label fx:id="lblOutput" layoutX="91.0" layoutY="129.0" prefHeight="17.0" prefWidth="118.0" />
<Button layoutX="646.0" layoutY="29.0" mnemonicParsing="false" text="Say Hello" />
<ListView fx:id="listBPos" layoutX="25.0" layoutY="84.0" prefHeight="298.0" prefWidth="249.0" />
<ListView fx:id="listMPos" layoutX="293.0" layoutY="84.0" prefHeight="298.0" prefWidth="242.0" />
<MenuBar layoutY="2.0">
<menus>
<Menu mnemonicParsing="false" text="File">
<items>
<MenuItem mnemonicParsing="false" text="Close" />
</items>
</Menu>
<Menu mnemonicParsing="false" text="Edit">
<items>
<MenuItem mnemonicParsing="false" text="Delete" />
</items>
</Menu>
<Menu mnemonicParsing="false" text="Help">
<items>
<MenuItem mnemonicParsing="false" text="About" />
</items>
</Menu>
</menus>
</MenuBar>
</children>
</AnchorPane>
[/CODE]
[CODE lang="java" title="Oberflächencontroller"]package newP;
import javafx.application.Application;
import javafx.beans.InvalidationListener;
import javafx.collections.FXCollections;
import javafx.collections.ListChangeListener;
import javafx.collections.ObservableList;
import javafx.fxml.FXML;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.scene.control.Label;
import javafx.scene.control.ListView;
import javafx.stage.Stage;
import javax.mail.MessagingException;
import java.io.IOException;
import java.util.Collection;
import java.util.Iterator;
import java.util.List;
import java.util.ListIterator;
public class BKPR extends Application {
@FXML
private Label lblOutput;
@FXML
private ListView<Bestellposition> listBPos;
@FXML
private ListView<Mailobject> listMPos;
private Controller controller;
public static void main(String[] args) {
launch(args);
}
@Override
public void start(Stage primaryStage) throws IOException, MessagingException, InterruptedException {
controller = new Controller();
Parent root = FXMLLoader.load(getClass().getResource("BKPR.fxml"));
Scene scene = new Scene(root, 800, 600);
primaryStage.setTitle("FXML Welcome");
primaryStage.setScene(scene);
primaryStage.show();
listenLaden();
}
public void listenLaden() throws IOException, InterruptedException, MessagingException {
//Für Bestellpositionen
ObservableList<Bestellposition> bpList = new ObservableList<Bestellposition>() {
@Override
public void addListener(ListChangeListener<? super Bestellposition> listChangeListener) {
}
@Override
public void removeListener(ListChangeListener<? super Bestellposition> listChangeListener) {
}
@Override
public boolean addAll(Bestellposition... bestellpositions) {
return false;
}
@Override
public boolean setAll(Bestellposition... bestellpositions) {
return false;
}
@Override
public boolean setAll(Collection<? extends Bestellposition> collection) {
return false;
}
@Override
public boolean removeAll(Bestellposition... bestellpositions) {
return false;
}
@Override
public boolean retainAll(Bestellposition... bestellpositions) {
return false;
}
@Override
public void remove(int i, int i1) {
}
@Override
public int size() {
return 0;
}
@Override
public boolean isEmpty() {
return false;
}
@Override
public boolean contains(Object o) {
return false;
}
@Override
public Iterator<Bestellposition> iterator() {
return null;
}
@Override
public Object[] toArray() {
return new Object[0];
}
@Override
public <T> T[] toArray(T[] ts) {
return null;
}
@Override
public boolean add(Bestellposition bestellposition) {
return false;
}
@Override
public boolean remove(Object o) {
return false;
}
@Override
public boolean containsAll(Collection<?> collection) {
return false;
}
@Override
public boolean addAll(Collection<? extends Bestellposition> collection) {
return false;
}
@Override
public boolean addAll(int i, Collection<? extends Bestellposition> collection) {
return false;
}
@Override
public boolean removeAll(Collection<?> collection) {
return false;
}
@Override
public boolean retainAll(Collection<?> collection) {
return false;
}
@Override
public void clear() {
}
@Override
public Bestellposition get(int i) {
return null;
}
@Override
public Bestellposition set(int i, Bestellposition bestellposition) {
return null;
}
@Override
public void add(int i, Bestellposition bestellposition) {
}
@Override
public Bestellposition remove(int i) {
return null;
}
@Override
public int indexOf(Object o) {
return 0;
}
@Override
public int lastIndexOf(Object o) {
return 0;
}
@Override
public ListIterator<Bestellposition> listIterator() {
return null;
}
@Override
public ListIterator<Bestellposition> listIterator(int i) {
return null;
}
@Override
public List<Bestellposition> subList(int i, int i1) {
return null;
}
@Override
public void addListener(InvalidationListener invalidationListener) {
}
@Override
public void removeListener(InvalidationListener invalidationListener) {
}
};
ObservableList<Bestellposition> emptyList= new ObservableList<Bestellposition>() {
@Override
public void addListener(ListChangeListener<? super Bestellposition> listChangeListener) {
}
@Override
public void removeListener(ListChangeListener<? super Bestellposition> listChangeListener) {
}
@Override
public boolean addAll(Bestellposition... bestellpositions) {
return false;
}
@Override
public boolean setAll(Bestellposition... bestellpositions) {
return false;
}
@Override
public boolean setAll(Collection<? extends Bestellposition> collection) {
return false;
}
@Override
public boolean removeAll(Bestellposition... bestellpositions) {
return false;
}
@Override
public boolean retainAll(Bestellposition... bestellpositions) {
return false;
}
@Override
public void remove(int i, int i1) {
}
@Override
public int size() {
return 0;
}
@Override
public boolean isEmpty() {
return false;
}
@Override
public boolean contains(Object o) {
return false;
}
@Override
public Iterator<Bestellposition> iterator() {
return null;
}
@Override
public Object[] toArray() {
return new Object[0];
}
@Override
public <T> T[] toArray(T[] ts) {
return null;
}
@Override
public boolean add(Bestellposition bestellposition) {
return false;
}
@Override
public boolean remove(Object o) {
return false;
}
@Override
public boolean containsAll(Collection<?> collection) {
return false;
}
@Override
public boolean addAll(Collection<? extends Bestellposition> collection) {
return false;
}
@Override
public boolean addAll(int i, Collection<? extends Bestellposition> collection) {
return false;
}
@Override
public boolean removeAll(Collection<?> collection) {
return false;
}
@Override
public boolean retainAll(Collection<?> collection) {
return false;
}
@Override
public void clear() {
}
@Override
public Bestellposition get(int i) {
return null;
}
@Override
public Bestellposition set(int i, Bestellposition bestellposition) {
return null;
}
@Override
public void add(int i, Bestellposition bestellposition) {
}
@Override
public Bestellposition remove(int i) {
return null;
}
@Override
public int indexOf(Object o) {
return 0;
}
@Override
public int lastIndexOf(Object o) {
return 0;
}
@Override
public ListIterator<Bestellposition> listIterator() {
return null;
}
@Override
public ListIterator<Bestellposition> listIterator(int i) {
return null;
}
@Override
public List<Bestellposition> subList(int i, int i1) {
return null;
}
@Override
public void addListener(InvalidationListener invalidationListener) {
}
@Override
public void removeListener(InvalidationListener invalidationListener) {
}
};
Bestellposition leereBPos = new Bestellposition();
leereBPos.setName("keine Bestellungen verfügbar");
//Für Mails
ObservableList<Mailobject> mlList = new ObservableList<Mailobject>() {
@Override
public void addListener(ListChangeListener<? super Mailobject> listChangeListener) {
}
@Override
public void removeListener(ListChangeListener<? super Mailobject> listChangeListener) {
}
@Override
public boolean addAll(Mailobject... mailobjects) {
return false;
}
@Override
public boolean setAll(Mailobject... mailobjects) {
return false;
}
@Override
public boolean setAll(Collection<? extends Mailobject> collection) {
return false;
}
@Override
public boolean removeAll(Mailobject... mailobjects) {
return false;
}
@Override
public boolean retainAll(Mailobject... mailobjects) {
return false;
}
@Override
public void remove(int i, int i1) {
}
@Override
public int size() {
return 0;
}
@Override
public boolean isEmpty() {
return false;
}
@Override
public boolean contains(Object o) {
return false;
}
@Override
public Iterator<Mailobject> iterator() {
return null;
}
@Override
public Object[] toArray() {
return new Object[0];
}
@Override
public <T> T[] toArray(T[] ts) {
return null;
}
@Override
public boolean add(Mailobject mailobject) {
return false;
}
@Override
public boolean remove(Object o) {
return false;
}
@Override
public boolean containsAll(Collection<?> collection) {
return false;
}
@Override
public boolean addAll(Collection<? extends Mailobject> collection) {
return false;
}
@Override
public boolean addAll(int i, Collection<? extends Mailobject> collection) {
return false;
}
@Override
public boolean removeAll(Collection<?> collection) {
return false;
}
@Override
public boolean retainAll(Collection<?> collection) {
return false;
}
@Override
public void clear() {
}
@Override
public Mailobject get(int i) {
return null;
}
@Override
public Mailobject set(int i, Mailobject mailobject) {
return null;
}
@Override
public void add(int i, Mailobject mailobject) {
}
@Override
public Mailobject remove(int i) {
return null;
}
@Override
public int indexOf(Object o) {
return 0;
}
@Override
public int lastIndexOf(Object o) {
return 0;
}
@Override
public ListIterator<Mailobject> listIterator() {
return null;
}
@Override
public ListIterator<Mailobject> listIterator(int i) {
return null;
}
@Override
public List<Mailobject> subList(int i, int i1) {
return null;
}
@Override
public void addListener(InvalidationListener invalidationListener) {
}
@Override
public void removeListener(InvalidationListener invalidationListener) {
}
};
ObservableList<Mailobject>emptyMList = new ObservableList<Mailobject>() {
@Override
public void addListener(ListChangeListener<? super Mailobject> listChangeListener) {
}
@Override
public void removeListener(ListChangeListener<? super Mailobject> listChangeListener) {
}
@Override
public boolean addAll(Mailobject... mailobjects) {
return false;
}
@Override
public boolean setAll(Mailobject... mailobjects) {
return false;
}
@Override
public boolean setAll(Collection<? extends Mailobject> collection) {
return false;
}
@Override
public boolean removeAll(Mailobject... mailobjects) {
return false;
}
@Override
public boolean retainAll(Mailobject... mailobjects) {
return false;
}
@Override
public void remove(int i, int i1) {
}
@Override
public int size() {
return 0;
}
@Override
public boolean isEmpty() {
return false;
}
@Override
public boolean contains(Object o) {
return false;
}
@Override
public Iterator<Mailobject> iterator() {
return null;
}
@Override
public Object[] toArray() {
return new Object[0];
}
@Override
public <T> T[] toArray(T[] ts) {
return null;
}
@Override
public boolean add(Mailobject mailobject) {
return false;
}
@Override
public boolean remove(Object o) {
return false;
}
@Override
public boolean containsAll(Collection<?> collection) {
return false;
}
@Override
public boolean addAll(Collection<? extends Mailobject> collection) {
return false;
}
@Override
public boolean addAll(int i, Collection<? extends Mailobject> collection) {
return false;
}
@Override
public boolean removeAll(Collection<?> collection) {
return false;
}
@Override
public boolean retainAll(Collection<?> collection) {
return false;
}
@Override
public void clear() {
}
@Override
public Mailobject get(int i) {
return null;
}
@Override
public Mailobject set(int i, Mailobject mailobject) {
return null;
}
@Override
public void add(int i, Mailobject mailobject) {
}
@Override
public Mailobject remove(int i) {
return null;
}
@Override
public int indexOf(Object o) {
return 0;
}
@Override
public int lastIndexOf(Object o) {
return 0;
}
@Override
public ListIterator<Mailobject> listIterator() {
return null;
}
@Override
public ListIterator<Mailobject> listIterator(int i) {
return null;
}
@Override
public List<Mailobject> subList(int i, int i1) {
return null;
}
@Override
public void addListener(InvalidationListener invalidationListener) {
}
@Override
public void removeListener(InvalidationListener invalidationListener) {
}
};
Mailobject emptyMo = new Mailobject();
emptyMo.setSender("Keine Mails vorhanden");
emptyMList.add(emptyMo);
System.out.println("BPOSumsetzung");
//BPOS umsetzung bpList
Bestellposition[] bp= controller.getBestellungen();//gefüllt und nicht null
for (Bestellposition bpos : bp)
{
bpList.add(bpos);//objekt gefüllt und nicht null
System.out.println("ID" + bpos.getRid() + " Tisch: " + bpos.getTableno() + " DRINK: " + bpos.getDrink());
}
// System.out.println(bpList.get(1));//null ?????????????????????????????????????????
//BP ist gefüllt
//aber sobald es auf ObservableArray übertragen wird: collecting data
if(bpList != null)
{
//wie kann eine Nullpointerexception auftreten wenn ich !=null abfange?
listBPos.setItems(FXCollections.observableList(bpList));
//listBPos.getItems().setAll(bpList); //hier gehts schief
}
else
{
//emptyList.add(leereBPos);
// listBPos.getItems().setAll(emptyList);
}
//Mailobjects umsetzung
System.out.println("MPosumsetzung");
mlList = controller.getMails();
if(mlList!=null)
{
System.out.println("test");
// listMPos.getItems().setAll(mlList); //hier gehts schief
// listMPos.setItems(mlList);
}
else
{
// listMPos.getItems().setAll(emptyMList);
}
}
}
[/CODE]
Ich bin alle Methoden zur befüllung der Listen durchgegangen und in keinem Fall sind sie leer oder unbefüllt. Die Daten erhalte ich von einem Node.js Server der auch über die gesamte Zeit läuft. (Ich erhalte die korrekten Daten vom Server)
Mein Problem bezieht sich also auf die Ausgabe im der ListView.
Ich bin ehrlich gesagt langsam schon etwas entmutigt. Ich sitze schon einige Tage an diesem Exception. Der Invoke steht nur für die hinten angestellte NullPointerException:
[CODE lang="java" title="Fehlerausgabe"]20:30:42: Executing task 'run'...
> Configure project :
Project : => no module-info.java found
> Task :compileJava
> Task
> Task :classes
> Task :configJavafxRun
> Task :run
BPOSumsetzung
ID1mhc6nmh8kpqn1eg4 Tisch: 3 DRINK: BermudaRose
ID1mhc6nmh8kpqn1eg5 Tisch: 3 DRINK: Cosmopolitan
ID1mhc6nbm0kps4oiez Tisch: 7 DRINK: AprilShower
ID1mhc6nbm0kps4oif1 Tisch: 7 DRINK: BermudaRose
ID1mhc6nbxgkps6prm2 Tisch: 4 DRINK: CubaLibre
ID1mhc6nbxgkps6prm4 Tisch: 4 DRINK: BermudaRose
Exception in Application start method
java.lang.reflect.InvocationTargetException
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:566)
at javafx.graphics/com.sun.javafx.application.LauncherImpl.launchApplicationWithArgs(LauncherImpl.java:473)
at javafx.graphics/com.sun.javafx.application.LauncherImpl.launchApplication(LauncherImpl.java:372)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:566)
at java.base/sun.launcher.LauncherHelper$FXHelper.main(LauncherHelper.java:1051)
Caused by: java.lang.RuntimeException: Exception in Application start method
at javafx.graphics/com.sun.javafx.application.LauncherImpl.launchApplication1(LauncherImpl.java:973)
at javafx.graphics/com.sun.javafx.application.LauncherImpl.lambda$launchApplication$2(LauncherImpl.java:198)
at java.base/java.lang.Thread.run(Thread.java:834)
Caused by: java.lang.NullPointerException
at newP.BKPR.listenLaden(BKPR.java:739)
at newP.BKPR.start(BKPR.java:49)
at javafx.graphics/com.sun.javafx.application.LauncherImpl.lambda$launchApplication1$9(LauncherImpl.java:919)
at javafx.graphics/com.sun.javafx.application.PlatformImpl.lambda$runAndWait$11(PlatformImpl.java:449)
at javafx.graphics/com.sun.javafx.application.PlatformImpl.lambda$runLater$9(PlatformImpl.java:418)
at java.base/java.security.AccessController.doPrivileged(Native Method)
at javafx.graphics/com.sun.javafx.application.PlatformImpl.lambda$runLater$10(PlatformImpl.java:417)
at javafx.graphics/com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:96)
at javafx.graphics/com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
at javafx.graphics/com.sun.glass.ui.win.WinApplication.lambda$runLoop$3(WinApplication.java:175)
... 1 more
Exception running application newP.BKPR
> Task :run FAILED
FAILURE: Build failed with an exception.
* What went wrong:
Execution failed for task ':run'.
> Process 'command 'C:\Program Files\JetBrains\IntelliJ IDEA Community Edition 2019.2.4\jbr\bin\java.exe'' finished with non-zero exit value 1
* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.
* Get more help at https://help.gradle.org
BUILD FAILED in 5s
4 actionable tasks: 3 executed, 1 up-to-date
20:30:47: Task execution finished 'run'.
[/CODE]
Für jeden Tipp, Ratschlag oder Hinweis bin ich äußerst dankbar.
Der Code ist nicht 100% sauber, ich versuche momentan über evolutionäres Prototyping zu arbeiten.
Dementsprechend wird dieser nach erwiesener Funktionalität neu aufbereitet.
LG J