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();
}
}
}
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".