Hallo Leute.
Zur Zeit bekomme ich immer wieder einen Stackoverflow error. Ich weis ehrlich gesagt nicht warum. Ich habe diese Klassen:
Dies ist meine Fenster Klasse.
Und dies ist einer meiner Controller in diesem Falle für den Musikbildschirm. Und hier meine FXMML Datei:
und hier noch eine:
Also ich finde keinen Fehler. Da es ein Stackoverflow ist, denke ich wird ja irgendwo irgendwas rekursiv ohne ende aufgerufen oder?? Ich kann den Fehler nicht finden. Habe auch mal gehört man sollte FXML Dateien nicht unbedingt im Konstruktor laden ist da was dran?
-GhostfaceChilla-
Zur Zeit bekomme ich immer wieder einen Stackoverflow error. Ich weis ehrlich gesagt nicht warum. Ich habe diese Klassen:
Java:
package mediabox.app.model;
import java.io.IOException;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.stage.Stage;
import mediabox.app.controller.Controller;
/**
* Objekte diser Klasse repräsentieren Fenster
* @author Christian
*/
public class Window {
private final Stage stage;
/**
*
* @param resourceURL Pfad der zu ladenden FXML Datei
* @param controller Controller des Fensters
* @param height Höhe des Fensters
* @param width Breite des Fensters
* @param resizable Gibt an ob das Fenster maximierbar sein soll
* @param fullscreen Gibt an ob das Fenster als Vollbild geöffnet wird
* @throws IOException
*/
public Window(String resourceURL, Controller controller, int height, int width, boolean resizable, boolean fullscreen) throws IOException{
FXMLLoader loader = new FXMLLoader(getClass().getResource(resourceURL)); //Lädt die zugehörige FXML
loader.setController(controller);
Parent root = (Parent)loader.load();
Scene scene = new Scene(root, height, width);
stage = new Stage();
stage.setResizable(resizable);
stage.setFullScreen(fullscreen);
stage.setScene(scene);
}
/**
* Zeigt das Fenster
*/
public void show(){
stage.show();
}
/**
* Versteckt das Fenster
*/
public void hide(){
stage.hide();
}
}
Java:
package mediabox.app.controller;
import java.io.IOException;
import java.net.URL;
import java.sql.SQLException;
import java.util.ResourceBundle;
import java.util.logging.Level;
import java.util.logging.Logger;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.control.TableView;
import javafx.scene.input.KeyCode;
import javafx.scene.input.KeyEvent;
import javafx.scene.layout.VBox;
import javafx.scene.media.MediaView;
import javax.naming.NamingException;
import mediabox.app.model.DatabaseConnector;
import mediabox.app.model.Music;
import mediabox.app.model.Window;
import mediabox.app.model.exceptions.ConnectionException;
/**
* FXML Controller class
* Diese Klasse repräsentiert den MusicscreenController. Er steuert alle Aktion
* die auf auf dem Musicscreen getätigt werden. D.h auch die Aktionen die
* innerhalb der Tabelle(Datenbank) und der Playlist ausgeführt werden.
* @author Christian
*/
public final class MusicscreenController extends Controller implements Initializable {
@FXML private VBox box;
//@FXML private Node playlistNode;
@FXML private final TableView libraryNode;
@FXML private MediaView mediaPlayerView;
private final Window musicscreen;
public MusicscreenController() throws IOException {
musicscreen = new Window("/mediabox/app/view/MusicscreenView.fxml", this, 0, 0, false, true);
musicscreen.show();
libraryNode = new TableView();
initLibrary();
libraryNode.requestFocus();
libraryNode.getSelectionModel().selectFirst();
}
/**
* Initialisiert die Bibliothek
*/
@Override
protected void initLibrary(){
try {
DatabaseConnector.connectTo("src/mediabox/database/database");
libraryNode.getItems().addAll(DatabaseConnector.loadEntries("Music")); // Einträge der Datenbank
// auslesen und der library Node hinzufügen
} catch (SQLException | ConnectionException | NamingException | ClassNotFoundException ex) {
Logger.getLogger(MusicscreenController.class.getName()).log(Level.SEVERE, null, ex);
}
}
@Override
public void initialize(URL url, ResourceBundle rb) {
// TODO
}
@FXML
public void onLibraryRequest(KeyEvent e){
if(e.getCode().equals(KeyCode.ENTER)){
try {
MediaPlayerController mediaPlayerController = new MediaPlayerController((Music)libraryNode.getSelectionModel().getSelectedItem());
} catch (IOException ex) {
Logger.getLogger(MusicscreenController.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
}
Code:
<?xml version="1.0" encoding="UTF-8"?>
<?import java.lang.*?>
<?import java.net.*?>
<?import java.util.*?>
<?import javafx.scene.*?>
<?import javafx.scene.control.*?>
<?import javafx.scene.layout.*?>
<?import javafx.geometry.Insets?>
<BorderPane xmlns:fx="http://javafx.com/fxml/1" styleClass="mainFxmlClass" >
<stylesheets>
<URL value="@style/musicscreenStyle.css"/>
</stylesheets>
<padding>
<Insets top="25" right="10" bottom="10" left="10"/>
</padding>
<top>
<VBox>
<Label fx:id="header" text="Musik" BorderPane.alignment="CENTER" />
<HBox>
<Label fx:id="librarayLabel" text="Biblitohek" />
</HBox>
</VBox>
</top>
<center>
<fx:include source="MusicLibraryView.fxml"/>
</center>
</BorderPane>
und hier noch eine:
Code:
<?xml version="1.0" encoding="UTF-8"?>
<?import java.lang.*?>
<?import java.net.*?>
<?import java.util.*?>
<?import javafx.scene.*?>
<?import javafx.scene.control.*?>
<?import javafx.scene.layout.*?>
<?import javafx.scene.control.cell.PropertyValueFactory?>
<TableView fx:id="libraryNode" editable="true" onKeyPressed="#onLibraryRequest" xmlns:fx="http://javafx.com/fxml" fx:controller="mediabox.app.controller.MusicscreenController">
<columns>
<TableColumn text="Index" prefWidth="40" >
<cellValueFactory>
<PropertyValueFactory property="id" />
</cellValueFactory>
</TableColumn>
<TableColumn text="Titel" prefWidth="150">
<cellValueFactory>
<PropertyValueFactory property="titel" />
</cellValueFactory>
</TableColumn>
<TableColumn text="Dauer" prefWidth="150" >
<cellValueFactory>
<PropertyValueFactory property="playtime" />
</cellValueFactory>
</TableColumn>
<TableColumn text="Interpret" prefWidth="150">
<cellValueFactory>
<PropertyValueFactory property="interpret" />
</cellValueFactory>
</TableColumn>
<TableColumn text="Album" prefWidth="150">
<cellValueFactory>
<PropertyValueFactory property="album" />
</cellValueFactory>
</TableColumn>
<TableColumn text="Genre" prefWidth="150" >
<cellValueFactory>
<PropertyValueFactory property="genre" />
</cellValueFactory>
</TableColumn>
<TableColumn text="Bewertung" prefWidth="60">
<cellValueFactory>
<PropertyValueFactory property="score" />
</cellValueFactory>
</TableColumn>
</columns>
</TableView>
Also ich finde keinen Fehler. Da es ein Stackoverflow ist, denke ich wird ja irgendwo irgendwas rekursiv ohne ende aufgerufen oder?? Ich kann den Fehler nicht finden. Habe auch mal gehört man sollte FXML Dateien nicht unbedingt im Konstruktor laden ist da was dran?
-GhostfaceChilla-