Prev: Can you write a foreach loop like this?
Next: SuperKISS for 32- and 64-bit RNGs in both C and Fortran.
From: Ramon on 1 Dec 2009 16:50 Hi, I'm trying to make a class that inherits from JDialog. The dialog has two buttons: Ok and Cancel. When the OK button is clicked, the main form is trying to read a result that is stored in the dialog's variable. Question: Is there a safe way how to read a dialog's instance variable (using a getter) after the dialog is set to invisible (i.e. this.setVisible(false)) ? PS: In general I am able to read the dialog's variables but, apparently, sometimes the dialog is destroyed by the garbage collector... Thanks.
From: Daniel Pitts on 1 Dec 2009 16:57 Ramon wrote: > Hi, > > I'm trying to make a class that inherits from JDialog. The dialog has > two buttons: Ok and Cancel. When the OK button is clicked, the main > form is trying to read a result that is stored in the dialog's variable. > > Question: Is there a safe way how to read a dialog's instance variable > (using a getter) after the dialog is set to invisible (i.e. > this.setVisible(false)) ? > > PS: In general I am able to read the dialog's variables but, apparently, > sometimes the dialog is destroyed by the garbage collector... > > Thanks. If you have a reference to the JDialog, then it will not be garbage collected. Are having a particular problem? What are the symptoms? Provide an SSCCE if you want to get the most help from this newsgroup. See <http://sscce.org> if you don't know how or why to provide an SSCCE. -- Daniel Pitts' Tech Blog: <http://virtualinfinity.net/wordpress/>
From: Ramon on 1 Dec 2009 17:07 The following is a short version of my Jdialog... public class InputDialog extends JDialog { private Boolean okButtonPressed_; // true = OK button pressed /* init here ... */ /* * OK button even handler */ private void okButtonActionPerformed(java.awt.event.ActionEvent evt) { this.setVisible(false); this.okButtonPressed_ = true; } } This is a method of the class which is calling my InputDialog: private void cmdUserSettings() { InputDialog inputDialog = new InputDialog(null, true); // if ok button was pressed if (inputDialog.getOkButtonPressed()) // ##### { /* ... */ } else { /* ... */ } if (inputDialog != null) inputDialog.dispose(); } The line marked with ##### is sometimes throwing a NullPointerException, thus indicating that somehow the garbage is destroying inputDialog... Any suggestions? Daniel Pitts wrote: > Ramon wrote: >> Hi, >> >> I'm trying to make a class that inherits from JDialog. The dialog has >> two buttons: Ok and Cancel. When the OK button is clicked, the main >> form is trying to read a result that is stored in the dialog's variable. >> >> Question: Is there a safe way how to read a dialog's instance >> variable (using a getter) after the dialog is set to invisible (i.e. >> this.setVisible(false)) ? >> >> PS: In general I am able to read the dialog's variables but, >> apparently, sometimes the dialog is destroyed by the garbage collector... >> >> Thanks. > If you have a reference to the JDialog, then it will not be garbage > collected. Are having a particular problem? What are the symptoms? > > Provide an SSCCE if you want to get the most help from this newsgroup. > See <http://sscce.org> if you don't know how or why to provide an SSCCE. >
From: Daniel Pitts on 1 Dec 2009 17:16 Please don't top-post. Harder to read it makes the post. Ramon wrote: > Daniel Pitts wrote: >> Ramon wrote: >>> Hi, >>> >>> I'm trying to make a class that inherits from JDialog. The dialog >>> has two buttons: Ok and Cancel. When the OK button is clicked, the >>> main form is trying to read a result that is stored in the dialog's >>> variable. >>> >>> Question: Is there a safe way how to read a dialog's instance >>> variable (using a getter) after the dialog is set to invisible (i.e. >>> this.setVisible(false)) ? >>> >>> PS: In general I am able to read the dialog's variables but, >>> apparently, sometimes the dialog is destroyed by the garbage >>> collector... >>> >>> Thanks. >> If you have a reference to the JDialog, then it will not be garbage >> collected. Are having a particular problem? What are the symptoms? >> >> Provide an SSCCE if you want to get the most help from this newsgroup. >> See <http://sscce.org> if you don't know how or why to provide an SSCCE. >> > The following is a short version of my Jdialog... > > public class InputDialog extends JDialog > { > private Boolean okButtonPressed_; // true = OK button pressed > > /* init here ... */ > > > /* > * OK button even handler > */ > private void okButtonActionPerformed(java.awt.event.ActionEvent evt) > { > this.setVisible(false); > this.okButtonPressed_ = true; > } > } > > > This is a method of the class which is calling my InputDialog: > > private void cmdUserSettings() > { > InputDialog inputDialog = new InputDialog(null, true); > > // if ok button was pressed > if (inputDialog.getOkButtonPressed()) // ##### > { /* ... */ } > else > { /* ... */ } > > if (inputDialog != null) > inputDialog.dispose(); > } > > The line marked with ##### is sometimes throwing a NullPointerException, > thus indicating that somehow the garbage is destroying inputDialog... While this isn't an SSCCE, I do believe I'm able to tell you the solution. The garbage collector will not set a value to null, so the NPE is caused by something else. In this case, your okButtonPressed_ is null. If null doesn't make sense for your value, you should use the primitive version, in this case "boolean" with a lower-case 'b'. A couple of other comments. In Java, the convention is to avoid "_" in names, except constants, which are ALL_UPPERCASE_LETTERS. Thus, a better declaration for your case is: private boolean okPressed; public boolean isOkPressed() { return okPressed; } One other comment, for your use-case, you might be happier using JOptionPane. some quick googling should give you some hints on how to use it. -- Daniel Pitts' Tech Blog: <http://virtualinfinity.net/wordpress/>
From: Ramon on 1 Dec 2009 17:20 What a silly mistake :) Thank you Daniel for your useful tips. Have a good day/night. Daniel Pitts wrote: > Please don't top-post. Harder to read it makes the post. > Ramon wrote: >> Daniel Pitts wrote: >>> Ramon wrote: >>>> Hi, >>>> >>>> I'm trying to make a class that inherits from JDialog. The dialog >>>> has two buttons: Ok and Cancel. When the OK button is clicked, the >>>> main form is trying to read a result that is stored in the dialog's >>>> variable. >>>> >>>> Question: Is there a safe way how to read a dialog's instance >>>> variable (using a getter) after the dialog is set to invisible (i.e. >>>> this.setVisible(false)) ? >>>> >>>> PS: In general I am able to read the dialog's variables but, >>>> apparently, sometimes the dialog is destroyed by the garbage >>>> collector... >>>> >>>> Thanks. >>> If you have a reference to the JDialog, then it will not be garbage >>> collected. Are having a particular problem? What are the symptoms? >>> >>> Provide an SSCCE if you want to get the most help from this >>> newsgroup. See <http://sscce.org> if you don't know how or why to >>> provide an SSCCE. >>> >> The following is a short version of my Jdialog... >> >> public class InputDialog extends JDialog >> { >> private Boolean okButtonPressed_; // true = OK button pressed >> >> /* init here ... */ >> >> >> /* >> * OK button even handler >> */ >> private void okButtonActionPerformed(java.awt.event.ActionEvent evt) >> { >> this.setVisible(false); >> this.okButtonPressed_ = true; >> } >> } >> >> >> This is a method of the class which is calling my InputDialog: >> >> private void cmdUserSettings() >> { >> InputDialog inputDialog = new InputDialog(null, true); >> >> // if ok button was pressed >> if (inputDialog.getOkButtonPressed()) // ##### >> { /* ... */ } >> else >> { /* ... */ } >> >> if (inputDialog != null) >> inputDialog.dispose(); >> } >> > >> The line marked with ##### is sometimes throwing a >> NullPointerException, thus indicating that somehow the garbage is >> destroying inputDialog... > While this isn't an SSCCE, I do believe I'm able to tell you the solution. > > The garbage collector will not set a value to null, so the NPE is caused > by something else. In this case, your okButtonPressed_ is null. > > If null doesn't make sense for your value, you should use the primitive > version, in this case "boolean" with a lower-case 'b'. > > A couple of other comments. In Java, the convention is to avoid "_" in > names, except constants, which are ALL_UPPERCASE_LETTERS. Thus, a > better declaration for your case is: > > private boolean okPressed; > > public boolean isOkPressed() { > return okPressed; > } > > One other comment, for your use-case, you might be happier using > JOptionPane. some quick googling should give you some hints on how to > use it.
|
Next
|
Last
Pages: 1 2 Prev: Can you write a foreach loop like this? Next: SuperKISS for 32- and 64-bit RNGs in both C and Fortran. |