Galera, estou com um problema que não achei a solução ainda. Me parece simples mas não achei uma saída. Tenho um projeto com vários JFrames. Um desses JFrames chamado InitialProtocol, abre outro JFrame chamado ViewIndexerInitialProtocol, quando é selecionado o arquivo e clicado em um botão. Quero que ao fechar este último JFrame, ele envie o parâmetro para habilitar um textField inicialmente desabilitado da tela InitialProtocol. Só que aí que está o problema. Eu consigo setar parâmetros a partir da JFrame InitialProtocol, mas quando tento fazer o inverso, é como se a tela não tivesse instanciada e dá NullPointerException…
Essa é a parte importante da classe InitialProtocol no qual chama a ViewIndexerInitialProtocol:
package sysdochu.telas;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.File;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.filechooser.FileNameExtensionFilter;
/**
*
- @author GeysonPereira
*/
public class InitialProtocol extends javax.swing.JFrame {
private String pathFilePDF; private ViewIndexerInitialProtocol viewIndexerInitialProtocol; private Boolean signalCloseViewIndexerInitialProtocol; private FirstWindow firstWindow;
/** * Creates new form InitialProtocol */ public InitialProtocol() { initComponents(); setLocationView(); openIndexerPage(); closePage(); }
private void openIndexerPage() { pathFileInitialProtocol.setEnabled(true); pathFileInitialProtocol.setText(""); cleanTextLogInitialProtocol(); }
private void cleanStates() { pathFilePDF = ""; pathFileInitialProtocol.setEnabled(true); pathFileInitialProtocol.setText(""); cleanTextLogInitialProtocol(); }
private void setLocationView() { setLocationCenterView(); }
private void closePage() { addWindowListener(new WindowAdapter() { @Override public void windowClosing(WindowEvent evt) { if (JOptionPane.showConfirmDialog(null, "Deseja realmente sair?") == JOptionPane.OK_OPTION) { cleanStates(); dispose(); } } }); }
private void setLocationCenterView() { setLocationRelativeTo(null); }
public void textLogInitialProtocol(String log) { textLogInitialProtocol.append(log + "\r\n"); }
private void cleanTextLogInitialProtocol() { textLogInitialProtocol.setText(""); }
private void openViewerIndexerInitialProtocol() { signalCloseViewIndexerInitialProtocol = false; if (pathFileInitialProtocol.getText().isEmpty()) { textLogInitialProtocol("Selecione um arquivo para indexar."); JOptionPane.showMessageDialog(rootPane, "Nenhum arquivo não foi selecionado."); } else if (!pathFileInitialProtocol.getText().endsWith(".pdf")) { textLogInitialProtocol("O documento selecionado não parece ser um PDF válido. Selecione o arquivo novamente."); JOptionPane.showMessageDialog(rootPane, "O documento selecionado não parece ser um PDF válido. Selecione o arquivo novamente."); } else { if (viewIndexerInitialProtocol == null) { pathFileInitialProtocol.setEnabled(false); viewIndexerInitialProtocol = new ViewIndexerInitialProtocol(); viewIndexerInitialProtocol.setVisible(true); viewIndexerInitialProtocol.setExtendedState(MAXIMIZED_BOTH); viewIndexerInitialProtocol.setStringPDF(pathFilePDF); System.out.println("Nulo\n"); } else { pathFileInitialProtocol.setEnabled(false); viewIndexerInitialProtocol.setVisible(true); viewIndexerInitialProtocol.setState(JFrame.NORMAL); viewIndexerInitialProtocol.setExtendedState(MAXIMIZED_BOTH); viewIndexerInitialProtocol.setStringPDF(pathFilePDF); System.out.println("Não Nulo\n"); } } }
public void setEnableTextFieldCloseViewIndexer(Boolean text){ pathFileInitialProtocol.setEnabled(text); }
Essa é a outra classe…
package sysdochu.telas;
import java.awt.Dimension;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextField;
/**
*
- @author GeysonPereira
*/
public class ViewIndexerInitialProtocol extends JFrame {
InitialProtocol signalClose; private String pathToPDF; private javax.swing.JPanel panelPDF; javax.swing.JFrame jframe;
/** * Creates new form ViewIndexarInitialProtocol */ public ViewIndexerInitialProtocol() { initComponents(); createJPanel(); maximizeView(); openPDF(); closePage(); }
private void closePage() { addWindowListener(new WindowAdapter() { @Override public void windowClosing(WindowEvent evt) { if (JOptionPane.showConfirmDialog(null, "Deseja Cancelar? Esses dados serão perdidos.") == JOptionPane.OK_OPTION) { sendSignalClose(); cleanStates(); excludeJPanel(); dispose(); } } }); }
private void sendSignalClose(){ signalClose.setEnableTextFieldCloseViewIndexer(true); }
Quem puder ajudar, agradeço.