Problemas com passagem de parâmetros

4 respostas
O

Bom dia, primeiramente gostaria de dizer que que sou novo no fórum mas sempre utilizei o GUJ para tirar dúvidas sobre Java.
Agora o X da questão.
Estou desenvolvendo meu projeto de TCC (uma tela de protótipo), essa tela salva alguns dados em um arquivo .txt. A tela está montada (ela é chamada por outra tela e isso está normal também) declarei os campos que necessito, as variáveis (com getters e setters) e os botões de ação porém na hora de gerar o arquivo txt (quando clico no botão gerar) eu me deparo com um erro. Verifiquei se o arquivo era gerado e realmente ele é gerado normalmente porém sem os dados passados nos campos. Fiz um teste e passei strings fixas ao invés das variáveis e as mesmas são gravadas normalmente no txt, logo ao que me parece estou errando na passagem de parâmetros o único porém é que não acho o porque desse erro (sou péssimo em passar parametros isso em qualquer linguagem que eu ja utilizei).

Segue código e erro

package _bonebank;

import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JFormattedTextField;
import javax.swing.JTextField;
import javax.swing.border.Border;
import javax.swing.text.MaskFormatter;

import java.awt.Color;
import java.awt.Container;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.File;
import java.io.IOException;

public class FormSimTag extends JFrame{
	
			private String Hora, Data, Nome, Material, Estado;
			private int ID;

	public FormSimTag(){
		
		initComponents();
		setResizable(false);
	}
	
	//Método para criar máscara de campo texto
	private MaskFormatter setMascara(String mascara){
		MaskFormatter mask = null;
		try{
			mask = new MaskFormatter(mascara);
		}
		catch(java.text.ParseException ex){}  
		
		return mask;
	}
	
	//Método para montar os componentes,
	public void initComponents() {
		//Definir container
		Container content = getContentPane();
		JPanel layout     = new JPanel(null);
		
//########################-MONTANDO COMPONENTES-#############################//		
		JLabel lbEstado   = new JLabel("Estado: ");
		lbEstado.setBounds(5, 105, 50, 20);
		JFormattedTextField txtEstado = new JFormattedTextField((setMascara("#######")));
		txtEstado.setBounds(60, 105, 55, 20);
		
		JLabel lbTXTID   = new JLabel("");
		lbTXTID.setBounds(190, 105, 80, 20);
		Border BLACK = BorderFactory.createLineBorder(Color.BLACK);
		
		JLabel lbDataExt 	  = new JLabel("Data da extração: ");
		lbDataExt.setBounds(5, 5, 130, 20);
		JFormattedTextField txtDTextract = new JFormattedTextField((setMascara("##/##/####")));
		txtDTextract.setBounds(120, 5, 70, 20);

		
		JLabel lbHoraExt 	  = new JLabel("Hora da extração: ");
		lbHoraExt.setBounds(5, 25, 130, 20);
		JFormattedTextField txtHRextract = new JFormattedTextField((setMascara("##:##")));
		txtHRextract.setBounds(120, 25, 40, 20);

		JLabel lbNomeDoador   = new JLabel("Nome do doador: ");
		lbNomeDoador.setBounds(5, 45, 130, 20);
		JTextField txtNDoador = new JTextField();
		txtNDoador.setBounds(120, 45, 190, 20);

		
		JLabel lbTpMaterial   = new JLabel("Tipo de material: ");
		lbTpMaterial.setBounds(5, 65, 130, 20);
		JTextField txtTpMaterial = new JTextField();
		txtTpMaterial.setBounds(120, 65, 140, 20);
				
		JButton btGeraTag = new JButton("Gerar Tag");
		btGeraTag.setBounds(10, 155, 90, 25);

		JButton btLimpaTD = new JButton("Limpar Dados");
		btLimpaTD.setBounds(110, 155, 120, 25);
		
		JLabel lbID   = new JLabel("ID gerada: ");
		lbID.setBounds(125, 105, 80, 20);
		
//####################-DEFININDO AÇÕES DOS COMPONENTES-######################//
		btGeraTag.addActionListener(new ActionListener() {
			
			@Override
			public void actionPerformed(ActionEvent evt) {
				acaoBotao(evt, '1');
			}
		});
		
		btLimpaTD.addActionListener(new ActionListener() {
			
			@Override
			public void actionPerformed(ActionEvent evt) {
				acaoBotao(evt, '2');
			}
		});
		
//####################-Adicionando componentes ao formulario-###############//
		content.add(layout);
		layout.add(lbDataExt);
		layout.add(txtDTextract);
		layout.add(lbHoraExt);
		layout.add(txtHRextract);
		layout.add(lbNomeDoador);
		layout.add(txtNDoador);
		layout.add(lbTpMaterial);
		layout.add(txtTpMaterial);
		layout.add(lbEstado);
		layout.add(txtEstado);
		layout.add(btGeraTag);
		layout.add(btLimpaTD);
		layout.add(lbID);
		layout.add(lbTXTID);
		

	}
	
//########################-Getter & Setters-################################//			
	public String getHora(String hora, JFormattedTextField txtHRextract) {
		hora = txtHRextract.getText();
				return Hora;
			}

   public void setHora(String hora) {
				Hora = hora;
			}

   public String getData(String data, JFormattedTextField txtDTextract) {
	   data = txtDTextract.getText();
				return Data;
			}

   public void setData(String data) {
				Data = data;
			}

   public String getNome(String nome, JTextField txtNDoador) {
	   nome = txtNDoador.getText();
				return Nome;
			}

   public void setNome(String nome) {
				Nome = nome;
			}

   public String getMaterial(String material, JTextField txtTpMaterial) {
	   material = txtTpMaterial.getText();
				return Material;
			}

   public void setMaterial(String material) {
				Material = material;
			}

   public  String getEstado(String estado, JFormattedTextField txtEstado) {
	   estado = txtEstado.getText();
				return Estado;
			}

   public void setEstado(String estado) {
				Estado = estado;
			}

//######################-EXECUTANDO AÇÕES DOS BOTÕES-#######################//
	public void acaoBotao(ActionEvent evt, char opt) {
		switch (opt) {
		case '1':
			//Método que gera a tag RFID
			GeraTag(Estado, ID, Data, Hora, Nome, Material);
			break;
			
		case '2':
			
			break;
			
		default:
			break;
		}
		
	}
	
//######################-MÉTODOS DAS AÇÕES DOS BOTÕES-######################//
	public void GeraTag(String estado, int id, String data, String hora,
						String nome, String material) {
		try{
			//Número aleatório que será a ID da Tag e o nome do arquivo
			ID = 20000 + (int) ((Math.random()*25000) + (int) (Math.random()*20000));
			
			BufferedWriter novoarquivo = new BufferedWriter(new FileWriter("..\\Ossos\\src\\arquivos\\"+ ID +".txt"));
			novoarquivo.write(Estado); //Estado
			novoarquivo.newLine();
/*			novoarquivo.write("teste2"); //ID
			novoarquivo.newLine();
			novoarquivo.write("teste3"); //Data
			novoarquivo.newLine();
			novoarquivo.write("teste4"); //Hora
			novoarquivo.newLine();
			novoarquivo.write("teste5"); //Nome
			novoarquivo.newLine();
			novoarquivo.write("teste 6"); //Material*/
			novoarquivo.close();
		}
		catch (IOException e){
			e.printStackTrace();			
		}
	}

}
Esse é o erro
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
	at java.io.Writer.write(Unknown Source)
	at _bonebank.FormSimTag.GeraTag(FormSimTag.java:201)
	at _bonebank.FormSimTag.acaoBotao(FormSimTag.java:180)
	at _bonebank.FormSimTag$1.actionPerformed(FormSimTag.java:97)
	at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
	at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
	at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
	at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
	at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
	at java.awt.Component.processMouseEvent(Unknown Source)
	at javax.swing.JComponent.processMouseEvent(Unknown Source)
	at java.awt.Component.processEvent(Unknown Source)
	at java.awt.Container.processEvent(Unknown Source)
	at java.awt.Component.dispatchEventImpl(Unknown Source)
	at java.awt.Container.dispatchEventImpl(Unknown Source)
	at java.awt.Component.dispatchEvent(Unknown Source)
	at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
	at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
	at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
	at java.awt.Container.dispatchEventImpl(Unknown Source)
	at java.awt.Window.dispatchEventImpl(Unknown Source)
	at java.awt.Component.dispatchEvent(Unknown Source)
	at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
	at java.awt.EventQueue.access$000(Unknown Source)
	at java.awt.EventQueue$1.run(Unknown Source)
	at java.awt.EventQueue$1.run(Unknown Source)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.security.AccessControlContext$1.doIntersectionPrivilege(Unknown Source)
	at java.security.AccessControlContext$1.doIntersectionPrivilege(Unknown Source)
	at java.awt.EventQueue$2.run(Unknown Source)
	at java.awt.EventQueue$2.run(Unknown Source)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.security.AccessControlContext$1.doIntersectionPrivilege(Unknown Source)
	at java.awt.EventQueue.dispatchEvent(Unknown Source)
	at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
	at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
	at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
	at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
	at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
	at java.awt.EventDispatchThread.run(Unknown Source)

Bom e foi nesse ponto que me perdi.
Qualquer ajuda é bem vinda :D
Obrigado pela atenção.

PS: Estou tentando aprender java por conta (tive apenas um semestre de java na faculdade) e esse projeto de TCC é o meu "desafio inicial".

4 Respostas

diego.sas

Brother dei uma olhada rápida no seu código, e em momento algum vc esta setando as variáveis que são passadas por parâmetro.

O

Cara, sem paracer muito burro, estou com problema para setar essa variáveis, fiz alguns testes aqui mas não deram muito certo.

diego.sas
É o seguinte a forma que vc fez não é a mais adequada. Para vc setar as variáveis teria que:
public void acaoBotao(ActionEvent evt, char opt) {   
        switch (opt) {   
        case '1':            
            
           // teria que chamar os getters...
            getHora();
           //....
   //Método que gera a tag RFID   
            GeraTag(Estado, ID, Data, Hora, Nome, Material);   
  break;

Porem não faz sentido ser assim... mas para nivel de teste, funcionaria.

O
diego.sas:
É o seguinte a forma que vc fez não é a mais adequada. Para vc setar as variáveis teria que:
public void acaoBotao(ActionEvent evt, char opt) {   
        switch (opt) {   
        case '1':            
            
           // teria que chamar os getters...
            getHora();
           //....
   //Método que gera a tag RFID   
            GeraTag(Estado, ID, Data, Hora, Nome, Material);   
  break;

Porem não faz sentido ser assim... mas para nivel de teste, funcionaria.

Opa consegui aqui. Valeu pela ajuda :D

Criado 10 de novembro de 2011
Ultima resposta 11 de nov. de 2011
Respostas 4
Participantes 2