JavaFX IndexOutOfBounds-Fehler

nighty89

Mitglied
Hallo zusammen,

bin neu hier und das ist mein erster Post. Dazu wollte ich allen ein herzliches hallo sagen. Ich schätze mich eher als Java-Beginner ein.

Nun zu meinem Problem. Wir machen zurzeit an der Schule ein Projekt, das auch ein bisschen Dantenbankprogrammierung enthält.

Wir haben eine Methode geschrieben, um die email vom user zu bekommen, welcher sich gerade einloggt(Die email-adresse ist in einer Datenbank gespeichert). Das funktioniert soweit auch alles ganz gut. Jedoch wenn ich die email an eine andere Klasse weitergeben möchte, bekomme ich den Fehler "java.lang.IndexOutOfBoundsException: Index: 0, Size: 0".

Hier der Java-Code

Java:
package Model;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.scene.control.Dialogs;
import Application.DB_Connection;
import Application.Main;
import Controller.Beschwerden;
import Controller.Beschwerden_Admin_Controller;
import Controller.Login_Controller;

public class Beschwerden_Admin_Model {

	private Main application = new Main();
	
	Login_Controller control = new Login_Controller();
	
	public void setApp(Main application) {
		
		this.application = application;
		
	}

	// Methode für das Befüllen der Tabelle
	public ObservableList<Beschwerden> tabelleAnzeigen(
			ObservableList<Beschwerden> data) {

		// OberservableArraylist erzeugen
		data = FXCollections.observableArrayList();
		
		try {

			ResultSet rs;
			PreparedStatement pst = null;
			Connection conn = null;

			conn = DB_Connection.getConnection();

			String mail = application.getPersonData().get(0).getEmail();

			// Sql statement für das Abrufen der Daten von der Datenbank
			String sql = "select ms_id, from_User, ms_subject, datum, status from Beschwerde where to_user='"+mail+"' order by ms_id desc;";

			// Sql-anweisung für das auslesen von ID, sender-email, betreff
			// datum und status
			//String sql = "select ms_id, from_User, ms_subject, datum, status from Beschwerde where to_user='Test@test.de' order by ms_id desc;";

			pst = conn.prepareStatement(sql);
			rs = pst.executeQuery();

			java.sql.ResultSetMetaData md = rs.getMetaData();

			// Anzahl spalten wird ermittelt
			int columns = md.getColumnCount();

			// Wenn etwas zurückgegeben wird, führe aus
			while (rs.next()) {
				String[] rows = new String[columns];

				// Reihe wird vorbereitet
				for (int i = 0; i < columns; i++) {
					rows[i] = rs.getString(i + 1);
				}

				// Strings in observablelist eintragen
				data.addAll(new Beschwerden(rows[0], rows[1], rows[2], rows[3],
						rows[4]));

			}

			rs.close();
			conn.close();

		} catch (Exception e) {

			// Catch-Block, falls fehler auftritt
			Dialogs.showErrorDialog(null,
					"Es ist ein Verbindungsfehler aufgetreten", "Error Dialog",
					"Verbindungsfehler");
			System.out.println(e);

		}

		// Obervablelist zurückgeben
		return data;

	}

In zeile 44 rufe ich die methode von der main-klasse mit String mail = application.getPersonData().get(0).getEmail(); und übergebe die variable mail der sql-query.

Nun möchte ich in der anderen Klasse die methode tabelleanzeigen mit der observablelist aufrufen, jedoch bekomme ich den oben genannten Fehler :(

Hier die controller Klasse:

Java:
package Controller;

import java.net.URL;
import java.sql.SQLException;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.ResourceBundle;

import javafx.collections.ObservableList;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.control.Button;
import javafx.scene.control.ComboBox;
import javafx.scene.control.Dialogs;
import javafx.scene.control.Dialogs.DialogOptions;
import javafx.scene.control.Dialogs.DialogResponse;
import javafx.scene.control.TableColumn;
import javafx.scene.control.TableView;
import javafx.scene.control.TextArea;
import javafx.scene.control.TextField;
import javafx.scene.control.cell.PropertyValueFactory;
import javafx.scene.input.MouseEvent;
import Application.Main;
import Model.Beschwerden_Admin_Model;

public class Beschwerden_Admin_Controller implements Initializable {

	@FXML
	private TableView<Beschwerden> tbl_Beschwerden;
	@FXML
	private TableColumn<Beschwerden, String> c1;
	@FXML
	private TableColumn<Beschwerden, String> c2;
	@FXML
	private TableColumn<Beschwerden, String> c3;
	@FXML
	private TableColumn<Beschwerden, String> c4;
	@FXML
	private TableColumn<Beschwerden, String> c5;
	@FXML
	private TextArea txtArea_Nachricht;
	@FXML
	private TextArea txtArea_Antwort;
	@FXML
	private TextField txt_An;
	@FXML
	private TextField txt_Betreff;
	@FXML
	private Button btn_Löschen;
	@FXML
	private Button btn_Weiterleiten;
	@FXML
	private Button btn_Antwort;

	@FXML
	private ComboBox<Beschwerden> cb_Mitarbeiter;

	private ObservableList<Beschwerden> data;

	private ObservableList<Beschwerden> data_combobox;

	private Main application;

	// Erzeugen des Objekts der klasse Beschwerden_Admin_Model
	Beschwerden_Admin_Model model = new Beschwerden_Admin_Model();

	// Main Klasse
	public void setApp(Main application) {

		model.setApp(application);
		this.application = application;

	}

	public void btn_back(ActionEvent event) {
		application.gotoMain_Frame_Admin();
	}

public void initialize(URL url, ResourceBundle rb) {

		c1.setCellValueFactory(new PropertyValueFactory<Beschwerden, String>(
				"MailID"));
		c2.setCellValueFactory(new PropertyValueFactory<Beschwerden, String>(
				"Email"));
		c3.setCellValueFactory(new PropertyValueFactory<Beschwerden, String>(
				"Betreff"));
		c4.setCellValueFactory(new PropertyValueFactory<Beschwerden, String>(
				"Datum"));
		c5.setCellValueFactory(new PropertyValueFactory<Beschwerden, String>(
				"Status"));

		try {

			// Daten werden in die tabelle Geladen, sobald auf Button beschwerde
			// gedrückt wird

			data = model.tabelleAnzeigen(data);

			tbl_Beschwerden.setItems(data);

		} catch (Exception e) {

			e.printStackTrace();

		}

		try {

			// Daten werden in die tabelle Geladen, sobald auf Button beschwerde
			// gedrückt wird

			data_combobox = model.fillComboBox(data_combobox);
			cb_Mitarbeiter.setItems(data_combobox);

		} catch (Exception e) {

			e.printStackTrace();

		}

	}

}

Vielleicht findet ihr ja den Fehler, würde mir sehr helfen.

Vielen Dank schon mal in voraus

Gruß

nighty
 

Deros

Bekanntes Mitglied
da du leider nicht den genauen StackTrace angibst mit der Zeile wo der Fehler aufgetreten ist rate ich jetzt einfach mal.


Java:
int columns = md.getColumnCount();
 
            // Wenn etwas zurückgegeben wird, führe aus
            while (rs.next()) {
                String[] rows = new String[columns];
 
                // Reihe wird vorbereitet
                for (int i = 0; i < columns; i++) {
                    rows[i] = rs.getString(i + 1);
                }
 
                // Strings in observablelist eintragen
                data.addAll(new Beschwerden(rows[0], rows[1], rows[2], rows[3],
                        rows[4]));

md.getColumnCount() ist warum auch immer 0 entsprechend wird rows auch mit 0 Feldern initialisiert, deine Schleife wird ganze 0 mal ausgeführt und trotzdem greifst du ohne Prüfung auf die Felder 0-4 vom Array zu. => IndexOutOfBoundsException
 
Zuletzt bearbeitet:

nighty89

Mitglied
Hey,

schon mal vielen Dank für deine schnelle Antwort.

Java:
 String mail = application.getPersonData().get(0).getEmail();
 
            // Sql statement für das Abrufen der Daten von der Datenbank
            String sql = "select ms_id, from_User, ms_subject, datum, status from Beschwerde where to_user='"+mail+"' order by ms_id desc;";
 
            // Sql-anweisung für das auslesen von ID, sender-email, betreff
            // datum und status
            //String sql = "select ms_id, from_User, ms_subject, datum, status from Beschwerde where to_user='Test@test.de' order by ms_id desc;";
Das bedeutet ja, dass er die email nicht bekommt oder? Wenn ich mit der auskommentierten Query in Zeile 8 das Versuche funktioniert es auch, weil ich ja wahrscheinlich die email direkt eingetragen habe. Vielleicht hilft dir die StackTrace weiter.

Hier ist die StackTrace:

Java:
java.lang.IndexOutOfBoundsException: Index: 0, Size: 0
	at java.util.ArrayList.rangeCheck(Unknown Source)
	at java.util.ArrayList.get(Unknown Source)
	at com.sun.javafx.collections.ObservableListWrapper.get(ObservableListWrapper.java:208)
	at Model.Beschwerden_Admin_Model.tabelleAnzeigen(Beschwerden_Admin_Model.java:43)
	at Controller.Beschwerden_Admin_Controller.initialize(Beschwerden_Admin_Controller.java:322)
	at javafx.fxml.FXMLLoader.load(FXMLLoader.java:2152)
	at Application.Main.replaceSceneContent(Main.java:293)
	at Application.Main.gotoBeschwerden_Admin(Main.java:247)
	at Controller.Main_Frame_Admin_Controller.Beschwerden_Admin(Main_Frame_Admin_Controller.java:50)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
	at java.lang.reflect.Method.invoke(Unknown Source)
	at sun.reflect.misc.Trampoline.invoke(Unknown Source)
	at sun.reflect.GeneratedMethodAccessor1.invoke(Unknown Source)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
	at java.lang.reflect.Method.invoke(Unknown Source)
	at sun.reflect.misc.MethodUtil.invoke(Unknown Source)
	at javafx.fxml.FXMLLoader$ControllerMethodEventHandler.handle(FXMLLoader.java:1435)
	at com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(CompositeEventHandler.java:69)
	at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:217)
	at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:170)
	at com.sun.javafx.event.CompositeEventDispatcher.dispatchBubblingEvent(CompositeEventDispatcher.java:38)
	at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:37)
	at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:92)
	at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:35)
	at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:92)
	at com.sun.javafx.event.EventUtil.fireEventImpl(EventUtil.java:53)
	at com.sun.javafx.event.EventUtil.fireEvent(EventUtil.java:28)
	at javafx.event.Event.fireEvent(Event.java:171)
	at javafx.scene.Node.fireEvent(Node.java:6863)
	at javafx.scene.control.Button.fire(Button.java:179)
	at com.sun.javafx.scene.control.behavior.ButtonBehavior.mouseReleased(ButtonBehavior.java:193)
	at com.sun.javafx.scene.control.skin.SkinBase$4.handle(SkinBase.java:336)
	at com.sun.javafx.scene.control.skin.SkinBase$4.handle(SkinBase.java:329)
	at com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(CompositeEventHandler.java:64)
	at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:217)
	at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:170)
	at com.sun.javafx.event.CompositeEventDispatcher.dispatchBubblingEvent(CompositeEventDispatcher.java:38)
	at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:37)
	at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:92)
	at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:35)
	at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:92)
	at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:35)
	at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:92)
	at com.sun.javafx.event.EventUtil.fireEventImpl(EventUtil.java:53)
	at com.sun.javafx.event.EventUtil.fireEvent(EventUtil.java:33)
	at javafx.event.Event.fireEvent(Event.java:171)
	at javafx.scene.Scene$MouseHandler.process(Scene.java:3328)
	at javafx.scene.Scene$MouseHandler.process(Scene.java:3168)
	at javafx.scene.Scene$MouseHandler.access$1900(Scene.java:3123)
	at javafx.scene.Scene.impl_processMouseEvent(Scene.java:1563)
	at javafx.scene.Scene$ScenePeerListener.mouseEvent(Scene.java:2265)
	at com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(GlassViewEventHandler.java:250)
	at com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(GlassViewEventHandler.java:173)
	at java.security.AccessController.doPrivileged(Native Method)
	at com.sun.javafx.tk.quantum.GlassViewEventHandler.handleMouseEvent(GlassViewEventHandler.java:292)
	at com.sun.glass.ui.View.handleMouseEvent(View.java:528)
	at com.sun.glass.ui.View.notifyMouse(View.java:922)
	at com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
	at com.sun.glass.ui.win.WinApplication.access$100(WinApplication.java:29)
	at com.sun.glass.ui.win.WinApplication$3$1.run(WinApplication.java:73)
	at java.lang.Thread.run(Unknown Source)

Bestätigt das deine Annahme? Ich kann mit der Fehlermeldung leider nichts anfangen :(
 

Harry Kane

Top Contributor
Sieht so aus, als hätte die PersonData-List aus der Main instance, auf die Beschwerden_Admin_Model zugreift, keine Elemente.
Du musst ja irgendwo eine Instanz von Beschwerden_Admin_Model erzeugen. Bist du sicher, daß du auf dieser Instanz setApp(Main application) aufrufst und dabei eine Main übergibst, die eine PersonData List mit einem Element enthält?
Ausserdem finde ich es sehr merkwürdig, daß du in deiner tabelleAnzeigen() methode von Beschwerden_Admin_Model das übergebene ObservableList<Beschwerden> data Objekt sofort mit einer neue, leeren Liste überschreibst.
 

Deros

Bekanntes Mitglied
soviel zum raten, um dir vielleicht ein bissel beim StackTrace zu helfen:
Java:
java.lang.IndexOutOfBoundsException: Index: 0, Size: 0     at 
java.util.ArrayList.rangeCheck(Unknown Source)     at java.util.ArrayList.get(Unknown Source)     at 
com.sun.javafx.collections.ObservableListWrapper.get(ObservableListWrapper.java:208)     at 
Model.Beschwerden_Admin_Model.tabelleAnzeigen(Beschwerden_Admin_Model.java:43)

Die 43 gibt die Zeile in deiner Klasse an in der der Fehler aufgetreten ist.

wenn die Zeilennummerierung stimmt wird es wohl diese zeile sein:
Java:
String mail = application.getPersonData().get(0).getEmail();
 
Zuletzt bearbeitet:

VfL_Freak

Top Contributor
Moin,

also bei mir liegt 43 genau zwischen zwei Zeilen ....

42. conn = DB_Connection.getConnection();
43.
44. String mail = application.getPersonData().get(0).getEmail();
Somit könnte man jetzt raten :autsch:

Bist Du sicher, dass DB-Connection ertzeugt wurde ???:L
Was sagt denn der Debugger an dieser Stelle ???:L

Gruß
Klaus
 

nighty89

Mitglied
Hey Leute,

Irgendwie bekomme ich die email-adresse nicht zurück, da das Objekt anscheinend zu spät erzeugt wird (Meinte ein Freund von mir).

Bin mir jetzt sicher, dass es an dieser Zeile hier liegt:
Java:
 String mail = application.getPersonData().get(0).getEmail();

Ein Freund von mir meinte ich soll das hier mit einem Konstruktor der Main-Klasse übergeben, jedoch kennt er sich mit JAVAFX nicht aus.
Java:
//Mitarbeiter_Admin_Controller
//model.setApp(application) wird wohl zu spät ausgeführt
public void setApp(Main application) {
 
        model.setApp(application);
        this.application = application;
 
    }

Hier noch unserer Main-Klasse. Vielleicht nutzt sie ja einem von euch was:
Die Funktion gotoBeschwerden_Admin() beginnt ab Zeile 226
Java:
package Application;

import java.io.InputStream;
import java.util.logging.Level;
import java.util.logging.Logger;

import Controller.Beschwerden_Admin_Controller;
import Controller.Beschwerden_Mitarbeiter_Controller;
import Controller.Dienstplan_Anlegen_Controller;
import Controller.Dienstplan_Bearbeiten_Controller;
import Controller.Funktionen_Controller;
import Controller.Login_Controller;
import Controller.Main_Frame_Admin_Controller;
import Controller.Main_Frame_Controller;
import Controller.Mitarbeiter;
import Controller.Mitarbeiter_Verwalten_Controller;
import Controller.Dienstplan_Controller;
import Controller.Nachrichten_main_controller;
import Controller.Nachrichten_send_controller;
import Controller.Schichten_controller;
import Controller.Urlaubsantrag_controller;
import javafx.application.Application;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.fxml.FXMLLoader;
import javafx.fxml.Initializable;
import javafx.fxml.JavaFXBuilderFactory;
import javafx.scene.Scene;
import javafx.scene.layout.AnchorPane;
import javafx.stage.Screen;
import javafx.stage.Stage;

public class Main extends Application {

    private Stage stage;
    
    private final double MINIMUM_WINDOW_WIDTH = 0;
    private final double MINIMUM_WINDOW_HEIGHT = 0;
    
    private ObservableList<Mitarbeiter> madata = FXCollections.observableArrayList();

    //Application wird gestartet
    public static void main(String[] args) {
        Application.launch(Main.class, (java.lang.String[])null);
    }
    
    @Override
    public void start(Stage primaryStage) {
        try {
        	
        	stage = primaryStage;
            stage.setTitle("Dienstplan");
            stage.setMinWidth(MINIMUM_WINDOW_WIDTH);
            stage.setMinHeight(MINIMUM_WINDOW_HEIGHT);
            gotoLogin();
            primaryStage.show();
        } catch (Exception ex) {
            Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
        }
    }   
    
    
    //Methode um auf die Urlaubsantrags-Seite zu gelangen.
    public void gotoRequest_list() {
    	try {
    		Urlaubsantrag_controller antrag = (Urlaubsantrag_controller) replaceSceneContent("Urlaubsantrag_interface.fxml");
    		antrag.setApp(this);
        } catch (Exception ex) {
            Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
        }	
	}
    
    // Methode um auf die Nachrichten-Seite zu gelangen.
    public void gotoMessage_page() {
    	try {
    		Nachrichten_main_controller msgs = (Nachrichten_main_controller) replaceSceneContent("Nachrichten_main.fxml");
    		msgs.setApp(this);
        } catch (Exception ex) {
            Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
        }	
	}
    
    // Methode um auf die Nachricht-senden Seite zu gelangen.
    public void goto_send() {
		try {
			Nachrichten_send_controller msg_send = (Nachrichten_send_controller) replaceSceneContent("Nachrichten_send.fxml");
			msg_send.setApp(this);
		} catch (Exception ex) {
            Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
		}
	}
	

    
   
    
    
    //Methoder für Logout-Button
    public void userLogout(){
        gotoLogin();
    }

    //Methode um auf die Login-Seite zu kommen
    private void gotoLogin() {
        try {
           Login_Controller login = (Login_Controller) replaceSceneContentLogin("Login_View.fxml");
            login.setApp(this);
        } catch (Exception ex) {
            Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    //Methode um die Login-Seite zu Inizieren
    private Initializable replaceSceneContentLogin(String fxml) throws Exception {
        FXMLLoader loader = new FXMLLoader();
        InputStream in = Main.class.getResourceAsStream(fxml);
        loader.setBuilderFactory(new JavaFXBuilderFactory());
        loader.setLocation(Main.class.getResource(fxml));
        AnchorPane page;
        try {
            page = (AnchorPane) loader.load(in);
        } finally {
            in.close();
        } 
        
        Scene scene = new Scene(page);
        stage.setScene(scene);
        stage.sizeToScene();
        //stage.setResizable(false);
        return (Initializable) loader.getController();
    }
    
    //Methode um auf "Hauptframe" zu gelangen
    public void gotoMain_Frame() {
        try {
           Main_Frame_Controller frame_Controller = (Main_Frame_Controller) replaceSceneContent("Main_Frame_View.fxml");
            frame_Controller.setApp(this);
        } catch (Exception ex) {
            Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
    
    //Methode um auf "Hauptframe" vom Admin zu gelangen
    public void gotoMain_Frame_Admin() {
        try {
           Main_Frame_Admin_Controller frame_Controller = (Main_Frame_Admin_Controller) replaceSceneContent("Main_Frame_Admin_View.fxml");
            frame_Controller.setApp(this);
        } catch (Exception ex) {
            Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
    
    

    
    //Methode um auf Mitarbeiter verwalten zu gelangen
    public void gotoUser_search() {
        try {
        	Mitarbeiter_Verwalten_Controller search_customer = (Mitarbeiter_Verwalten_Controller) replaceSceneContent("Mitarbeiter_Verwalten_View.fxml");
            search_customer.setApp(this);
           
        } catch (Exception ex) {
            Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
    
    //Methode um auf den Dienstplan zu gelangen Version 2
    public void gotoDienstplan() {
        try {
           Dienstplan_Controller dienstplan = (Dienstplan_Controller) replaceSceneContent("Dienstplan_View.fxml");
           dienstplan.setApp(this);
        } catch (Exception ex) {
            Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
    

    
    //Methode um auf den Dienstplan_anlegen zu gelangen Version 3
    public void gotoDienstplan_anlegen(String head) {
        try {
        	Dienstplan_Anlegen_Controller dienstplan_anlegen = (Dienstplan_Anlegen_Controller) replaceSceneContent("Dienstplan_Anlegen_View.fxml");
        	dienstplan_anlegen.setHeader(head);
        	dienstplan_anlegen.setApp(this);
        } catch (Exception ex) {
            Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
    
    public void gotoDienstplan_Bearbeiten_Controller(String id) {
        try {
        	Dienstplan_Bearbeiten_Controller dienstplan_bearbeiten = (Dienstplan_Bearbeiten_Controller) replaceSceneContent("Dienstplan_Bearbeiten_View.fxml");
        	dienstplan_bearbeiten.setData(id);
        	dienstplan_bearbeiten.setApp(this);
        } catch (Exception ex) {
            Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
    
    //Methode um auf "Hauptframe" vom Admin zu gelangen
    public void gotoSchichten() {
        try {
           Schichten_controller frame_Controller = (Schichten_controller) replaceSceneContent("Schichten_View.fxml");
            frame_Controller.setApp(this);
        } catch (Exception ex) {
            Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

  //Methode um auf "Beschwerden_Admin" vom Admin zu gelangen
    public void gotoBeschwerden_Admin() {
        try {
        	
           Beschwerden_Admin_Controller Beschwerden_Controller = (Beschwerden_Admin_Controller) replaceSceneContent("Beschwerden_Admin_View.fxml");
           Beschwerden_Controller.setApp(this);
           
        } catch (Exception ex) {
            Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
    
  //Methode um auf "Beschwerden_Admin" vom Admin zu gelangen
    public void gotoBeschwerden_Mitarbeiter() {
        try {
           Beschwerden_Mitarbeiter_Controller Beschwerden_Controller = (Beschwerden_Mitarbeiter_Controller) replaceSceneContent("Beschwerden_Mitarbeiter_View.fxml");
        
           Beschwerden_Controller.setApp(this);
        } catch (Exception ex) {
            Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
    
  //Methode um auf "Funktionen z.b Küche, Bar..." vom Admin zu gelangen
    public void gotoFunktionen_Admin() {
        try {
           Funktionen_Controller funk_controller = (Funktionen_Controller) replaceSceneContent("Funktionen_View.fxml");
            funk_controller.setApp(this);
        } catch (Exception ex) {
            Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
    
	// Methode um aktuellen User mit seinen Daten hinzuzufügen.
    public void setCurrentUser(Mitarbeiter thisUser) {
    	madata.add(thisUser);
    }
    
    public ObservableList<Mitarbeiter> getPersonData() {
        return madata;
    }
    
    //Methode um alle Frames zu initieren ausser die Login-seite
    private Initializable replaceSceneContent(String fxml) throws Exception {
        FXMLLoader loader = new FXMLLoader();
        InputStream in = Main.class.getResourceAsStream(fxml);
        loader.setBuilderFactory(new JavaFXBuilderFactory());
        loader.setLocation(Main.class.getResource(fxml));
        AnchorPane page;
        try {
            page = (AnchorPane) loader.load(in);
        } finally {
            in.close();
        } 
       
        Scene scene = new Scene(page);
        stage.setScene(scene);
        stage.sizeToScene();
        return (Initializable) loader.getController();
    }    
    
}

Vielen Dank für die schnellen Antworten, ihr seid echt spitze :applaus:
 

Harry Kane

Top Contributor
Wie ich weiter oben schon vermutet habe: offenbar enthält die ObservableList<Mitarbeiter> madata aus deiner Main-Klasse keine Elemente. Zumindest nicht die Instanz von Main, auf die deine Beschwerden_Admin_Model-Instanz zugreift. Deshalb gibt es die Exception, wenn du versuchst, auf das erste Element zuzugreifen.
Solange du nicht setCurrentUser() auf dieser Instanz deiner Main-Klasse aufrufst, wird die Exception nicht weggehen, egal ob du deine Main-Instanz per Methode an ein anderes weitergibst oder im Konstruktor.
Aus dem Quellcode der Main-Klasse ist natürlich nicht ersichtlich, ob setCurrentUser() jemals aufgerufen wird, sondern nur aus der Verwendung der Klasse.
Das einzige was klar ist: die Main-Instanz, die Beschwerden_Admin_Model von sich aus beinhaltet, hat eine leere madata-List. Du musst aber nicht nur eine neue Main-Instanz an Beschwerden_Admin_Model übergeben, bevor du die tabelleAnzeigen-Methode aus Beschwerden_Admin_Model ohne Exception aufrufen kannst, sondern du musst auch sicherstellen, daß auf dieser Main-Instanz setCurrentUser(Mitarbeiter thisUser) aufgerufen wurde.
 
Zuletzt bearbeitet:

Deros

Bekanntes Mitglied
leider kann ich Harrys Erklärungen nur so halb folgen und verstehe nicht so ganz wie er auf die Mitarbeiter kommt, von daher versuch ich es einfach auch mal zu erklären was da schief läuft.

Die entscheidene Stelle dürfte hier sein:
Java:
//Methode um auf "Beschwerden_Admin" vom Admin zu gelangen
    public void gotoBeschwerden_Admin() {
        try {
           
           Beschwerden_Admin_Controller Beschwerden_Controller = (Beschwerden_Admin_Controller) replaceSceneContent("Beschwerden_Admin_View.fxml");
           Beschwerden_Controller.setApp(this);
           
        } catch (Exception ex) {
            Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

Als erstes Variablenname wie Beschwerden_Controller immer mit kleinen Buchstaben anfangen, aber daran scheitert es natürlich nicht.
Es scheitert, weil beim initialisieren des beschwerdeController gleich implizit die Methode initialize() aufgerufen wird, genau bei load() in replaceSceneContent(). Diese ruft die Methode tabelleAnzeigen() vom Model auf. Sinnfreierweise immer mit einem data das noch null ist, aber das ist nicht das Problem wird in tabelleAnzeigen ja initialisiert, könnte man sich aber schenken.

Deri eigentliche Fehler ist dann die schon vielfach benannte Stelle, da du die App ja erst eine Zeile später in der Main für den Controller setzt.

Dürfte also schon helfen die Tabellen erst in der Main zu laden, wenn die Daten mittels setApp übergeben wurden.

:applaus:
 

nighty89

Mitglied
Hi Deros,

Danke für deine Antwort.

genau das ist mein Problem. Ich habe es nun so gelöst, dass ich für das Anzeigen der Tabelle einen separaten Button verwende. Nun würde ich gerne die Tabelle in intialize() in Beschwerde_Controller_Admin laden, weil ich die Tabelle gleich bei Aufruf anzeigt haben möchte. Hast du da vllt eine Idee wie ich das lösen könnte, dass die Tabelle gleich in intialize() geladen werden kann?

Vielen Dank für deine Mühe. Kann das Forum nur weiter empfehlen.

Gruß

nighty
 

Deros

Bekanntes Mitglied
Warum direkt beim intialize()?

Java:
Beschwerden_Mitarbeiter_Controller beschwerdenController = (Beschwerden_Mitarbeiter_Controller) replaceSceneContent("Beschwerden_Mitarbeiter_View.fxml"); 
beschwerdenController.setApp(this);
beschwerdenController.showTable();

und in die neue Methode showTable() kommt halt all das rein was du vorher in der intialize()-Methode hattest und noch nicht funktioniert hat.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
Xge For/Array Error: IndexOutOfBounds Allgemeine Java-Themen 4
E Output Fehler (Java-Programm Kuchen) Allgemeine Java-Themen 11
S Fehler: <ID> erwartet Allgemeine Java-Themen 5
P Fehler: Hauptklasse Main konnte nicht gefunden oder geladen werden Ursache: java.lang.ClassNotFoundException: Main Allgemeine Java-Themen 24
Pinhg Discord JDA Bot - Fehler Allgemeine Java-Themen 3
KonradN CVE-2022-21449: Fehler in Java bei Signaturprüfung Allgemeine Java-Themen 20
L Fehler mit Boolean. (Glaube ich zumindest) Allgemeine Java-Themen 6
P Selenium Scriipt zeigt Fehler beim Import Allgemeine Java-Themen 3
O Fehler bei Variablen Allgemeine Java-Themen 2
HerrBolte Seltsamer Fehler nur in der Windows- und nicht in der Java-Console O_O Allgemeine Java-Themen 16
M Kein Scanner Fehler durch falsche EIngabe Allgemeine Java-Themen 4
N nicht einsehbarer Fehler im code, kann nicht mehr übersetzten Allgemeine Java-Themen 51
yakazuqi Fehler beim Laden. JDA (Java Discord API) Allgemeine Java-Themen 1
C Fehler bei der Benutzung von itextpdf Allgemeine Java-Themen 1
U Fehler beim Compillieren Allgemeine Java-Themen 13
x46 String Format Fehler Allgemeine Java-Themen 2
bueseb84 Fehler beim Import von Maven Dependencies aus lokalem artifactory Allgemeine Java-Themen 2
MiMa Datei verschieben hat einen Fehler?? Allgemeine Java-Themen 20
O xlsx Datei auslesen mit POI von Apache wirft seltsamen Fehler. Allgemeine Java-Themen 11
T Java-Quiz Code Fehler Allgemeine Java-Themen 10
A Fehler beim Öffnen eines Projekts Allgemeine Java-Themen 6
E Hat der Compiler einen Fehler oder warumbeendet return nicht eine Methode ? Allgemeine Java-Themen 7
T Fehler bei IF abfrage Allgemeine Java-Themen 8
C Fehler beim Debuggen von Listen Allgemeine Java-Themen 4
M Einheitenrechner - Fehler Allgemeine Java-Themen 12
D Erste Schritte Fehler mit negativen und 0 Zahlen im String Allgemeine Java-Themen 6
T Denk-Fehler? Allgemeine Java-Themen 4
A Finde den Fehler nicht. Allgemeine Java-Themen 7
H Class 'java.io.BuferedReader' is not present in JRE Emulation Libary | GWT Fehler?! Allgemeine Java-Themen 0
D Unbekannter Fehler Allgemeine Java-Themen 1
R Fehler im Code Allgemeine Java-Themen 1
R Fehler im Code Allgemeine Java-Themen 3
ReinerCoder Methode einer Klasse meldet Fehler "misplaced construct(s)" Allgemeine Java-Themen 13
R Wo ist mein Fehler in der Methode DRINGEND Allgemeine Java-Themen 9
R Wo ist mein Fehler in diesem Code Allgemeine Java-Themen 7
I Fehler beim Ant-Package erstellen mit Java 9 Allgemeine Java-Themen 1
L Fehler bei der Ausführung einer Jar Allgemeine Java-Themen 2
T OOP Fehler im Design Allgemeine Java-Themen 9
Thallius Unfassbarer Fehler. Brauche Ideen zum Debuggen Allgemeine Java-Themen 9
U Eclipse MANIFEST fehler Allgemeine Java-Themen 7
I Fehler bei HashMaps Darstellung Allgemeine Java-Themen 10
R Classnotfoundexception Fehler Allgemeine Java-Themen 3
A Fehler beim Aktualisieren JTable Allgemeine Java-Themen 1
N Compiler-Fehler Warum erhalte ich einen Nullpointer Fehler? Allgemeine Java-Themen 2
N Prim's Algorithm - wo ist der Fehler? Allgemeine Java-Themen 3
J-Gallus Erste Schritte Wahrscheinlich Anfänger Fehler beim rechnen. Falsches Ergebnis. Allgemeine Java-Themen 9
M Line-Fehler Allgemeine Java-Themen 8
U Input/Output Warum wirft mir das Programm diesen Fehler? Allgemeine Java-Themen 6
RalleYTN Merkwürdiger Fehler mit JFrame im Vollbild Allgemeine Java-Themen 4
V AudioInputStream Fehler Allgemeine Java-Themen 1
J Interpreter-Fehler Fehler beim Verschlüsseln Invalid AES key length Allgemeine Java-Themen 1
G Fehler mit Vector Allgemeine Java-Themen 3
F Java Fehler "buildTableModel" Allgemeine Java-Themen 3
F Fehler in Zeile in Log schreiben Allgemeine Java-Themen 6
DanielsLPecke Input/Output Arduino komischer Fehler. Allgemeine Java-Themen 38
V JavaFX Fehler beim Starten einer Jar Allgemeine Java-Themen 7
S Hashtable Fehler Allgemeine Java-Themen 14
S Zwei String vergleichen, Fehler markieren Allgemeine Java-Themen 3
C Hilfe bei einer Fehler meldung Allgemeine Java-Themen 3
K Was ist mein Fehler? Allgemeine Java-Themen 2
Tausendsassa Compiler-Fehler Fertiges Programm mit Fehler Allgemeine Java-Themen 10
B Eclipse Nach Export einer .jar Fehler: Hauptklasse konnte nicht gefunden oder geladen werden Allgemeine Java-Themen 5
K Fehler beim erstellen von .jar Datei Allgemeine Java-Themen 3
P Java Fehler auf Win2008 Server java.io.FilePermission IE8 Version JRE 1.7.0_51 Allgemeine Java-Themen 7
M Eclipse - Fehler: Hauptklasse de.xyz.init.MeineKlasse konnte nicht gefunden oder geladen werden Allgemeine Java-Themen 2
Seikuassi Swing Stehe auf dem Schlauch...(BufferedReader_Writer-Fehler?) Allgemeine Java-Themen 4
M Eclipse Fehler beim Installieren des Plugins "Jigloo" Allgemeine Java-Themen 12
A Eclipse - Fehler beim "RUN" - "Unable to Launch - The selection cannot be launched" Allgemeine Java-Themen 6
B Fehler bei einem Programm Allgemeine Java-Themen 10
F HILFEEEEEE JAVA Fehler - Tiny Umbrella Allgemeine Java-Themen 1
N GPIB - Fehler: Unable to open device Allgemeine Java-Themen 1
S Ganzes Programm "stucked" - JVM-Fehler? Allgemeine Java-Themen 2
D Variablen Ausgabe bzw. einlese Fehler Allgemeine Java-Themen 7
I Fehler java.lang.NullPointerException Allgemeine Java-Themen 5
B NullPointerException - Aber kein Fehler im Code Allgemeine Java-Themen 4
B Eclipse Fehler in eclipse/Java Allgemeine Java-Themen 13
B Fehler beim Auslesen von Einstellungen. Zwei ähnliche Blöcke, nur eins geht. Allgemeine Java-Themen 5
H JUnit Fehler beim Compilieren - erledigt Allgemeine Java-Themen 0
J Fehler beim parsens eine Datums Allgemeine Java-Themen 3
A Thread Fehler absichtlich provozieren Allgemeine Java-Themen 3
J Compiler-Fehler .nextLine fehler Allgemeine Java-Themen 3
B Fehler im Java-Code Allgemeine Java-Themen 4
S Java Fehler bei Konsolenprogramm Allgemeine Java-Themen 2
N Was ist ein Fehler (Requirement-Engineering) Allgemeine Java-Themen 3
C System.out.print("") Compiler Fehler Allgemeine Java-Themen 2
T Programm bleibt ohne Fehler stehen Allgemeine Java-Themen 4
G Fehler beim instanzieren einer Generischen Klasse Allgemeine Java-Themen 5
K Eclipse Fehler beim Ausführen meines Programms in Eclipse Allgemeine Java-Themen 11
K Input/Output Fehler bei Dateierzeugung Allgemeine Java-Themen 7
M Fehler bei Remoteinstallation von Java Allgemeine Java-Themen 5
M Fehler bei Verwendung von TexturePaint Allgemeine Java-Themen 16
M JUnit & Multithreading - sehr seltener Fehler Allgemeine Java-Themen 3
G Merkwürdiger Fehler NetBeans Allgemeine Java-Themen 2
G Native Library / Fehler beim Laden der .so/.dll Datei Allgemeine Java-Themen 17
P java tabelle auslesen - xls (excel) fehler Allgemeine Java-Themen 5
iB0T Unverständlicher Fehler Allgemeine Java-Themen 5
S Antlr Grammatik übersetzt ohne Fehler, dennoch wird Zahl nicht als Eingabe erkannt Allgemeine Java-Themen 4
S Fehler mit JScrollPane Allgemeine Java-Themen 4
K SimpleDateFormat Fehler Allgemeine Java-Themen 3
M import Fehler Allgemeine Java-Themen 2

Ähnliche Java Themen

Neue Themen


Oben