Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > Java > JDialog Question...

Reply
Thread Tools

JDialog Question...

 
 
Ramon
Guest
Posts: n/a
 
      12-01-2009
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.
 
Reply With Quote
 
 
 
 
Daniel Pitts
Guest
Posts: n/a
 
      12-01-2009
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/>
 
Reply With Quote
 
 
 
 
Ramon
Guest
Posts: n/a
 
      12-01-2009
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.
>

 
Reply With Quote
 
Daniel Pitts
Guest
Posts: n/a
 
      12-01-2009
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/>
 
Reply With Quote
 
Ramon
Guest
Posts: n/a
 
      12-01-2009
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.

 
Reply With Quote
 
alexandre_paterson@yahoo.fr
Guest
Posts: n/a
 
      12-02-2009
On Dec 1, 9:50 pm, Ramon <(E-Mail Removed)> 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.


Don't do it that way... It's really not a nice.

Imagine the point of your dialog is to create some 'Nano' object
(whatever, it's just an example).

Usually the only thing that you care about in your app is to be
handled
that Nano object (or a failure, in some apps).

So simply pass a callback when creating your JDialog and call it
when the user clicks on OK.

public final class MyDialog extends JDialog {

public MyDialog(
@NotNull final Handable<Nano> callback
) {
...
btnOK.addActionListener( new ActionListener() {
public void actionPerformed( ActionEvent e ) {
callback.handle( shinyNanoObject );
dispose();
}
} );
}

}


Keeping a reference to the JDialog, starting to read it's
reference/primitives etc. is not nice OO.

It's all objects and interaction between said objects.

All that you care about is what kind of object your JDialog
can handle...

Don't go into low level details, focus on the bigger OO picture.

If you like to alienate your users and want an application
that seems to be hung when the user mistakingly hides a modal
window (or, worse, moves it to another virtual desktop), then
use the idiom:

Color after = JColorChooser.showDialog(...)

But it's really ****-poor practices. If forces you to give
a default 'fallback' value (wtf, a user picking 'red' and a
user cancelling, while 'red' was the default is the same?
A big joke I tell ya) and it forces you to compare the return
value with the fallback to see if something changed or not and
it doesn't tell you if the user clicked on OK or if he cancelled.
In some case it can amount to the same, but for a great many
scenario you'll need something more complicated than this toyish
procedural way of doing things.

The antithesis of OO...


Alex
 
Reply With Quote
 
Roedy Green
Guest
Posts: n/a
 
      12-09-2009
On Tue, 01 Dec 2009 22:50:51 +0100, Ramon
<(E-Mail Removed)> wrote, quoted or indirectly quoted
someone who said :

>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)) ?


visibility has nothing whatsoever to do with the ability to read/write
variables.

for sample JDialog code see
http://mindprod.com/jgloss/jdialog.html
--
Roedy Green Canadian Mind Products
http://mindprod.com
The future has already happened, it just isnít evenly distributed.
~ William Gibson (born: 1948-03-17 age: 61)
 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
Still slightly clueless about this GUI thing...(JProgressBar never draws on a JDialog) Inertia_sublimation Java 5 01-03-2004 12:05 AM
JInternalFrame with JDialog cccc Java 0 12-02-2003 10:34 AM
JDialog Box with Minimize option Disabled venky Java 1 11-13-2003 07:54 PM
Controlling where JDialog opens Larry Coon Java 3 10-24-2003 07:21 AM
Re: JDialog in taskbar under Linux Alexandr Molochnikov Java 0 07-31-2003 12:24 AM



Advertisments