Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Silva Mateus

JavaFx - Caused by: java.lang.StackOverflowError

Recommended Posts

Olá estou com um problema em minhas classes Java. Quando tento criar um novo "Fornecedor", o console me resulta o Caused by: java.lang.StackOverflowError. 

Aqui estão as minhas classes que interagem entre si. Se alguém poder me auxiliar na resolução deste problema, agradeço. 

package view;

import application.Main;
import javafx.fxml.FXML;
import javafx.scene.control.Label;
import javafx.scene.control.TableColumn;
import javafx.scene.control.TableView;
import javafx.scene.control.TextField;
import javafx.scene.control.cell.PropertyValueFactory;
import javafx.stage.Stage;
import model.Fornecedor;
import model.Produto;

public class FornecedorOverViewController {
	
    @FXML
    private TableView<Fornecedor> tabelaFornecedor;

    @FXML
    private TableColumn<Fornecedor, Integer> idFornecedor;

    @FXML
    private TableColumn<Fornecedor, String> nomeFornecedor;

    @FXML
    private TableColumn<Fornecedor, String> telefoneFornecedor;
    
    @FXML
    private Label nome;
    
    @FXML
    private Label telefone;
	 
    
    public FornecedorOverViewController() {
    	
    }
    int i = 0;

	private Main main;


    @FXML
    private void initialize() {

         nomeFornecedor.setCellValueFactory(
        		 cellData -> cellData.getValue().nomeProperty());
         telefoneFornecedor.setCellValueFactory(
        		 cellData -> cellData.getValue().telefoneProperty());
         idFornecedor.setCellValueFactory(new PropertyValueFactory<>("id"));
         showFornecedorDetails(null);

         tabelaFornecedor.getSelectionModel().selectedItemProperty().addListener(
 				(observable, oldValue, newValue) -> showFornecedorDetails(newValue));
         
    }
    public void setMainI(Main main) {
        this.main = main;
        tabelaFornecedor.setItems(main.getFornecedorData());
    }
  
    private void showFornecedorDetails(Fornecedor fornecedor) {
    	if (fornecedor != null) {
    		 nome.setText(fornecedor.getNome());
    		 telefone.setText(fornecedor.getTelefone());
    	} else {
    		 nome.setText(" ");
    		 telefone.setText(" ");
    	}
    }
   	@FXML
   	private void handleDeleteFornecedor() {
   		int selectedIndex = tabelaFornecedor.getSelectionModel().getSelectedIndex();
   		if (selectedIndex >= 0) {
   			tabelaFornecedor.getItems().remove(selectedIndex);
   		} else {
   		}
   	}
	@FXML
	private void handleNewFornecedor() {
		Fornecedor newFornecedor = new Fornecedor(null,0);
		boolean okClicked = main.showFornecedorEditDialog(newFornecedor);
		if (okClicked) {
			main.getFornecedorData().add(newFornecedor);
		}
	}

}
package application;

import java.io.IOException;


import javafx.application.Application;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.fxml.FXMLLoader;
import javafx.scene.Scene;
import javafx.scene.layout.AnchorPane;
import javafx.scene.layout.BorderPane;
import javafx.stage.Modality;
import javafx.stage.Stage;
import model.Categoria;
import model.Fornecedor;
import model.Produto;
import model.Usuario;
import view.FornecedorEditDialog;
import view.FornecedorOverViewController;
import view.LoginController;
import view.ProdutoEditDialog;
import view.ProdutoOverViewController;
import view.RootLayoutController;

public class Main extends Application {


	private Stage primaryStage;
	private BorderPane rootLayout;
	private AnchorPane loginLayout;
 
	private ObservableList<Produto> produtoData = FXCollections.observableArrayList();
	private ObservableList<Fornecedor> fornecedorData = FXCollections.observableArrayList();
	private ObservableList<Usuario> usuarioData = FXCollections.observableArrayList();
	private ObservableList<Categoria> categoriaData = FXCollections.observableArrayList();
 
	public Main() {
		int i =0;
		produtoData.add(new Produto("Skol", 5.99, ++i,199));
		produtoData.add(new Produto("Budweiser", 8.99, ++i,2002));
		produtoData.add(new Produto("Heineken", 12.00, ++i,22));
		i = 0;
		fornecedorData.add(new Fornecedor("Ambev", ++i));
		fornecedorData.add(new Fornecedor("Cervejaria Heineken", ++i));
		fornecedorData.add(new Fornecedor("Coca-Cola", ++i));
		fornecedorData.add(new Fornecedor("Fonte-Ijuí", ++i));
		i = 0;
		
		usuarioData.add(new Usuario("mateus", "m16s97aa"));
		usuarioData.add(new Usuario("dala", "123456"));
		usuarioData.add(new Usuario("root", "654321"));
		
		categoriaData.add(new Categoria("Cerveja", ++i));
		categoriaData.add(new Categoria("Vinho", ++i));
		categoriaData.add(new Categoria("Vodka", ++i));
		categoriaData.add(new Categoria("Cachaca", ++i));
		i = 0;

	}

	@Override
	public void start(Stage primaryStage) {
		this.primaryStage = primaryStage;
		this.primaryStage.setTitle("Wine And Beer");

		login();
		/*
		if(click) {			
			initRootLayout();

			showProdutosOverView();
		}
		*/
	
	}

	public void initRootLayout() {
		try {
			// Load root layout from fxml file.
			FXMLLoader loader = new FXMLLoader();
			loader.setLocation(Main.class.getResource("/view/RootLayout.fxml"));
			rootLayout = (BorderPane) loader.load();

			// Show the scene containing the root layout.
			Scene scene = new Scene(rootLayout);
			primaryStage.setScene(scene);

			// Give the controller access to the main app.
			RootLayoutController controller = loader.getController();
			controller.setMain(this);

			primaryStage.show();
		} catch (IOException e) {
			e.printStackTrace();
		}

		/*
		// Try to load last opened person file.
		File file = getPersonFilePath();
		if (file != null) {
			loadPersonDataFromFile(file);
		}
		*/
	}
	public void logar() {
			primaryStage.close();
			
			initRootLayout();

			showProdutosOverView();
		//return true;
	}
	public void login() {
		try {
			// Load root layout from fxml file.
			FXMLLoader loader = new FXMLLoader();
			loader.setLocation(Main.class.getResource("/view/Login.fxml"));
			loginLayout = (AnchorPane) loader.load();

			// Show the scene containing the root layout.
			Scene scene = new Scene(loginLayout);
			primaryStage.setScene(scene);

			// Give the controller access to the main app.
			LoginController controller = loader.getController();
			controller.setMain(this);

			primaryStage.show();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
 
	public void showProdutosOverView() {
		try {
			// Load person overview.
			FXMLLoader loader = new FXMLLoader();
			loader.setLocation(Main.class.getResource("/view/Produto.fxml"));
			AnchorPane personOverview = (AnchorPane) loader.load();

			// Set person overview into the center of root layout.
			rootLayout.setCenter(personOverview);

			// Give the controller access to the main app.
			ProdutoOverViewController controller = loader.getController();
			controller.setMain(this);
			
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

	 
	
	public Stage getPrimaryStage() {
		return primaryStage;
	}
	public ObservableList<Produto> getProdutoData() {
		return produtoData;
	}
	public ObservableList<Fornecedor> getFornecedorData(){
		return  fornecedorData;
	}
	public ObservableList<Usuario> getUsuarioData(){
		return usuarioData;
	}
	public ObservableList<Categoria> getCategoriaData(){
		return categoriaData;
	}

	public static void main(String[] args) {
		launch(args);
	}
	public boolean showProdutoEditDialog(Produto produto) {
		try {
			// Load the fxml file and create a new stage for the popup dialog.
			FXMLLoader loader = new FXMLLoader();
			loader.setLocation(Main.class.getResource("/view/ProdutoEditDialog.fxml"));
			AnchorPane page = (AnchorPane) loader.load();
			
			// Create the dialog Stage.
			Stage dialogStage = new Stage();
			dialogStage.setTitle("Editar Produto");
			dialogStage.initModality(Modality.WINDOW_MODAL);
			dialogStage.initOwner(primaryStage);
		//	dialogStage.getIcons().add(new Image("file:resources/images/edit.png"));
			Scene scene = new Scene(page);
			dialogStage.setScene(scene);
			
			// Set the person into the controller.
			ProdutoEditDialog controller = loader.getController();
			controller.setDialogStage(dialogStage);
			controller.setProduto(produto);
			controller.lotarCombo(fornecedorData, categoriaData);
			controller.setMain(this);

			// Show the dialog and wait until the user closes it
			dialogStage.showAndWait();

			return controller.isOkClicked();
		} catch (IOException e) {
			e.printStackTrace();
			return false;
		}
	}
	 
	public boolean showFornecedorEditDialog(Fornecedor fornecedor) {
		try {
			// Load the fxml file and create a new stage for the popup dialog.
			FXMLLoader loader = new FXMLLoader();
			loader.setLocation(Main.class.getResource("/view/FornecedorEditDialog.fxml"));
			AnchorPane page = (AnchorPane) loader.load();
			
			// Create the dialog Stage.
			Stage dialogStage = new Stage();
			dialogStage.setTitle("Editar Fornecedor");
			dialogStage.initModality(Modality.WINDOW_MODAL);
			dialogStage.initOwner(primaryStage);
			Scene scene = new Scene(page);
			dialogStage.setScene(scene);
			
			// Set the person into the controller.
			FornecedorEditDialog controller = loader.getController();
			controller.setDialogStage(dialogStage);
			controller.setFornecedor(fornecedor);
			controller.setMain(this);

			// Show the dialog and wait until the user closes it
			dialogStage.showAndWait();

			return controller.isOkClicked();
		} catch (IOException e) {
			e.printStackTrace();
			return false;
		}
	}
	
}
package view;

import application.Main;
import javafx.fxml.FXML;
import javafx.scene.control.TextField;
import javafx.stage.Stage;
import model.Fornecedor;
import model.Produto;

public class FornecedorEditDialog {

	@FXML
	private TextField nome; 
	@FXML 
	private TextField telefone;
	private Stage dialogStage;
	private Main main; 
	private int id;
	private Fornecedor fornecedor;
    private boolean okClicked = false;


    @FXML
    private void initialize() {
    }

    public void setDialogStage(Stage dialogStage) {
        this.dialogStage = dialogStage;
    }
    
    public void setMain(Main main) {
    	this.main = main;
    	id = main.getFornecedorData().size();
    	id = id+1;
    }
    public void setFornecedor(Fornecedor fornecedor) {
        this.fornecedor = fornecedor;
        nome.setText(fornecedor.getNome());
        telefone.setText(fornecedor.getTelefone());
        
    }
    public boolean isOkClicked() {
        return isOkClicked();
    }
    @FXML
    private void handleOk() {
        if (isInputValid()) {
            fornecedor.setNome(nome.getText());
	        fornecedor.setTelefone(telefone.getText());

	        if(fornecedor.getId() == 0) {
	        	fornecedor.setId(this.id);
	        }
	        
	        
            okClicked = true;
            dialogStage.close();
        }
    }

    @FXML
    private void handleCancel() {
        dialogStage.close();
    }
    private boolean isInputValid() {
        String errorMessage = "";

        if (nome.getText() == null || nome.getText().length() == 0) {
            errorMessage += "Produto Invalido!\n"; 
        }
        if (telefone.getText() == null || telefone.getText().length() == 0) {
            errorMessage += "Preco invalidos!\n"; 
        }
        if (errorMessage.length() == 0) {
            return true;
        } else {
            // Show the error message.
        	 
            return false;
        }
    }
    
}

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

  • Conteúdo Similar

    • Por violin101
      Caros amigos, saudações.
       
      Estou escrevendo um Sistema Java Web e quando clico no Botão Salvar, o Java acusa esse erro:

      ERROR: Cannot invoke "Object.toString()" because the return value of "java.util.Map.get(Object)" is null
       
      Já tentei de várias formas resolver esse problema, mas não estou conseguindo.

      Por favor, alguém pode me ajudar identificar a origem e resolver o problema acima ?

      Grato,
       
      Cesar
    • Por violin101
      Caros amigos, saudações.

      Estou enfrentando um problema que não consigo entender.

      Após Instalar o MySql versão 8.0.36, funciona corretamente realizando as conexões.

      O problema é:
      ---[ após reiniciar o micro, o MySql não faz as conexões.
      --[ tenta localizar este arquivo, mas não acha: my.ini
       
      Onde localizo ou configuro este arquivo na Pasta MySql ?

      Grato,
       
      Cesar
    • Por violin101
      Caros amigos, saudações.
       
      Por favor, preciso de ajuda em Relação a Instalar o Jasper Reports no Eclipse, pois a opção de Eclipse Marketplace, não encontra para instalar.
       
      Já tentei de todas as formas mas não consegui, alguém conhece alguma rotina explicando este procedimento ?
       
      Grato,
       
      Cesar
    • Por violin101
      Caros amantes da informática.
       
      Saudações.
       
      Estou usando o Eclipse Mars versão 4.5.0  e o 4.5.2, acredito que deva ter versões mais novas. 
      Sou novato em JAVA e estou encontrando alguns problema em Instalação de alguns plugins, como por exemplo:
       
      1) quando tento instalar o JBoss Tools através do Eclipse Marteplace, o Eclipse não o encontra na lista de plugins.
      2) se tento instalar através do Install New Software, abaixa alguns arquivos, mas também não instala o JBoss.
      3) se abro o site e arrasto o download para a área de trabalho do Eclipse, também não instala o JBoss.
       
      Caros amigos, existe outra alguma forma de instalar o JBoss Tools no Eclipse e como seria ?
       
      Grato,
       
      Cesar
       
       
    • Por ILR master
      Pessoal, pergunta bem simples. Abaixo tenho o seguinte código:
       
      <script>
      function alerta()
      {
        if (window.confirm("Você realmente quer sair?")) {
          window.open("sair.html");
      }
      }
      </script>
       
      Funciona perfeitamente, só que está abrindo em outra janela e quero que abra na mesma janela.
       
      Alguém pode me ajudar?
×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.