-1

OK I did read the link you posted but I get these errors:

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at client.medical.main.Main.jMenuItem6ActionPerformed(Main.java:348)
at client.medical.main.Main.access$400(Main.java:21)
at client.medical.main.Main$5.actionPerformed(Main.java:249)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2018)
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2341)
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)
at javax.swing.AbstractButton.doClick(AbstractButton.java:376)
at javax.swing.plaf.basic.BasicMenuItemUI.doClick(BasicMenuItemUI.java:833)
at javax.swing.plaf.basic.BasicMenuItemUI$Handler.mouseReleased(BasicMenuItemUI.java:877)
at java.awt.Component.processMouseEvent(Component.java:6505)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3321)
at java.awt.Component.processEvent(Component.java:6270)
at java.awt.Container.processEvent(Container.java:2229)
at java.awt.Component.dispatchEventImpl(Component.java:4861)
at java.awt.Container.dispatchEventImpl(Container.java:2287)
at java.awt.Component.dispatchEvent(Component.java:4687)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4832)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4492)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4422)
at java.awt.Container.dispatchEventImpl(Container.java:2273)
at java.awt.Window.dispatchEventImpl(Window.java:2719)
at java.awt.Component.dispatchEvent(Component.java:4687)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:723)
at java.awt.EventQueue.access$200(EventQueue.java:103)
at java.awt.EventQueue$3.run(EventQueue.java:682)
at java.awt.EventQueue$3.run(EventQueue.java:680)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:87)
at java.awt.EventQueue$4.run(EventQueue.java:696)
at java.awt.EventQueue$4.run(EventQueue.java:694)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:693)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:244)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:163)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:151)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:147)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:139)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:97)

I edited my code so it would look like the one in the link you given me.

JDialog : I just added one new JButton just like this:

private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {

    Window win = SwingUtilities.getWindowAncestor(this);
    if (win != null) {
        win.dispose();
     }
   }
  public String getFieldText() {
     return jTextField1.getText();
  }

JFrame: here I made 2 variables dialogPanel and dialog then edited the button that open jdialog here is the code:

 private Recherche dialogPanel = new Recherche();
 private JDialog dialog;    
 private void jMenuItem6ActionPerformed(java.awt.event.ActionEvent evt) {                                           
  if (dialog == null) {
     Window win = SwingUtilities.getWindowAncestor(this);
      if (win != null) {
        dialog = new JDialog(win, "My Dialog",
                 Dialog.ModalityType.APPLICATION_MODAL);
        dialog.getContentPane().add(dialogPanel);
        dialog.pack();
        dialog.setLocationRelativeTo(null);
     }
  }
  dialog.setVisible(true); // here the modal dialog takes over
  System.out.print(dialogPanel.getFieldText());

}

I know I am messing something here but I can't see it, could you please help me solve this problem?

Nathan Hughes
  • 94,330
  • 19
  • 181
  • 276
user1559104
  • 105
  • 3
  • 10
  • You have not told us enough to let us help you. What line causes the NPE? Have you tested the variables on that line to see which one(s) are null? Have you looked back into your code to see why the variable(s) are null? – Hovercraft Full Of Eels Sep 12 '12 at 13:30
  • `client.medical.main.Main.jMenuItem6ActionPerformed(Main.java:348)` says that the NullPointerException (NPE) occurs on line 348 of the file Main.java. Where is line 348 in the code you posted? – Code-Apprentice Sep 12 '12 at 14:04

1 Answers1

1

For starters, don't use JDialog#show() since that method has been deprecated (please check the JDialog API to see more on this). Instead use JDialog#setVisible(true).

Is this code being called from within the "main frame"?

If so, since your dialog is modal, you can simply query the dialog instance for the state of its variables in the code immediately after you've set it visible. You could use getter (also known as accessor) methods to extract this information. Otherwise you'll need to have a valid reference to the "main frame" instance to pass the information in.

For more help, please tell us more about your problem. Also, please note that I rarely have classes that extend JFrame or JDialog but instead create my JFrame or JDialog when needed to hold my GUI's which are geared towards creating JPanels for more flexibility.

Edit
Regarding your recent edit, I still can't see exactly where you're stuck, but let's simplify the problem and just have you try to get the information from a JTextField in the JDialog and use that information to populate a JTextField in the JFrame. I'd give the dialog class a getFieldText() method that returns the text held in its field, and then I'd have the JFrame call this method on the dialog instance, after the dialog returns.

For a specific example of this, please see the code I posted in this answer here.

Edit 2
For example, using your code, everything works. So if you're still having trouble, you have to show us more:

import java.awt.*;
import java.awt.event.*;

import javax.swing.*;

public class DialogEg {
   private static void createAndShowGUI() {
      MainPanelGen mainPanelGen = new MainPanelGen();

      JFrame frame = new JFrame("DialogEg");
      frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      frame.getContentPane().add(mainPanelGen.getMainPanel());
      frame.pack();
      frame.setLocationRelativeTo(null);
      frame.setVisible(true);
   }

   public static void main(String[] args) {
      SwingUtilities.invokeLater(new Runnable() {
         public void run() {
            createAndShowGUI();
         }
      });
   }

}

class MainPanelGen {
   private JPanel mainPanel = new JPanel();
   private JTextField field = new JTextField(10);
   private JButton btn = new JButton(new BtnActn());
   private JDialog dialog;
   private DialogPanel dialogPanel = new DialogPanel();

   public MainPanelGen() {
      mainPanel.add(field);
      mainPanel.add(btn);

      field.setEditable(false);
      field.setFocusable(false);
   }

   public JPanel getMainPanel() {
      return mainPanel;
   }

   private class BtnActn extends AbstractAction {
      BtnActn() {
         super("Button");
      }

      @Override
      public void actionPerformed(ActionEvent arg0) {
         if (dialog == null) {
            Window win = SwingUtilities.getWindowAncestor(mainPanel);
            if (win != null) {
               dialog = new JDialog(win, "My Dialog",
                     Dialog.ModalityType.APPLICATION_MODAL);
               dialog.getContentPane().add(dialogPanel);
               dialog.pack();
               dialog.setLocationRelativeTo(null);
            }
         }
         dialog.setVisible(true); // here the modal dialog takes over
         System.out.println   (dialogPanel.getFieldText());
         field.setText(dialogPanel.getFieldText());
      }
   }
}

class DialogPanel extends JPanel {
   private JTextField field = new JTextField(10);
   private JButton exitBtn = new JButton(new ExitBtnAxn("Exit"));

   public DialogPanel() {
      add(field);
      add(exitBtn);
   }

   public String getFieldText() {
      return field.getText();
   }

   private class ExitBtnAxn extends AbstractAction {

      public ExitBtnAxn(String name) {
         super(name);
      }

      @Override
      public void actionPerformed(ActionEvent arg0) {
         Window win = SwingUtilities.getWindowAncestor(DialogPanel.this);
         if (win != null) {
            win.dispose();
         }

      }

   }

}

You have not told us enough to let us help you. What line causes the NPE? Have you tested the variables on that line to see which one(s) are null? Have you looked back into your code to see why the variable(s) are null?

Community
  • 1
  • 1
Hovercraft Full Of Eels
  • 283,665
  • 25
  • 256
  • 373