tags:

views:

299

answers:

3

I'm using JOptionPane.showMessageDialog(null,e,"Invalid Name",JOptionPane.ERROR_MESSAGE) method to display the exception extended from Exception class. But the Pop window is not getting displayed unless and until I press Alt+tab. What can be the reason? Below is the snippet. Suggest me something.

import java.awt.event.*;
import java.awt.*;
import javax.swing.*;
import java.util.*;
import java.io.*;

class NameInvalidException extends Exception {
    /**
     * Invalid Name
     */
    String invName;

    public NameInvalidException() {
        super();
    }

    public NameInvalidException(String s) {
        invName = s;
    }

}

class SmallException extends Exception {
    /**
     * Short Name
     */
    String sName;

    public SmallException() {
        super();
    }

    public SmallException(String s) {
        sName = s;
    }

}

public class ValidName {
    public static void main(String arr[]) {
        try {
            BufferedReader br = new BufferedReader(new InputStreamReader(
                    System.in));
            System.out.println("Enter the name: ");

            String name = br.readLine();
            checkName(name);
        } catch (IOException e) {
            System.out.println(e);
        }

    }// end main

    static void checkName(String name) {

        try {

            String sarr[] = name.split(" ");
            if (sarr.length != 3)
                throw new SmallException(name);
            for (int j = 0; j < 3; j++) {
                System.out.println("in j loop");
                if (sarr[j].length() < 3) {
                    throw new SmallException();
                }
            }
            for (int i = 0; i < name.length(); i++) {

                char ch = name.charAt(i);
                if (Character.isLetter(ch) || Character.isWhitespace(ch))
                    System.out.println("ok " + ch);
                else
                    throw new NameInvalidException();

            }// end for
        }// end try
        catch (NameInvalidException e) {
            JOptionPane.showMessageDialog(null, e.toString(), "Invalid Name",
                    JOptionPane.ERROR_MESSAGE);
            System.out.println(e);
        } catch (SmallException es) {
            JOptionPane.showMessageDialog(null, es.toString(), "Invalid Name",
                    JOptionPane.ERROR_MESSAGE);

        }
    }// end checkName(name)
}
+2  A: 

While it is somewhat puzzling that you want to display a JOptionPane from a console program without further gui, the code seems to work fine.

I pasted it into my IDE, let it run and it correctly showed the option panes on corresponding input. I tried running it from a command prompt and the result was the same - the code runs fine without the problems you describe.

I suggest trying to run it from a command prompt yourself.

Mathias Weyel
Thank you! :) I did the same but it might be the problem related to windows os.
Supereme
+2  A: 

Most likely cause for this problem is that you are passing a null reference in the call to showMessageDialog. Though passing null as first parameter is fine it is likely to cause issues like the one you are facing. (Also I think you are facing this issue on Windows).

To fix this issue (if the above chunk of code is part of your larger GUI code base) pass the parent JFrame reference (instead of null) in your call to showMessageDiaglog.

Also check the article Finding Lost Frames of Java Specialist's news letter which has some more details about this kind of issue.

sateesh
Thank You :), I read the article and it is going to help me alot!
Supereme
+2  A: 

I had the same behaviour on my machine. The trick is that you have to tell the JDialog class to set itself always on top - which is not possible with using the convenient static showMessageDialog method. So we have to create the JOptionPane and the JDialog by hand. Just add another static method to the ValidName class:

private static void showErrorPane(String message, String title) {
   JOptionPane pane = new JOptionPane(message, JOptionPane.ERROR_MESSAGE);
   JDialog dialog = pane.createDialog(title);
   dialog.setAlwaysOnTop(true);
   dialog.setVisible(true);
}

and call this method instead of the JOptionPane.showMessageDialog. It works on my machine, the error message appears where it should: on top of my eclipse IDE.

Andreas_D
Thank you!:), I tried to run the above code.Initially it gave me error for method "createDialog(String)" then by referring to documentation I tried for createDialog(null,String) where null stands for parent component which is not there in my snippet. It worked well.
Supereme
Maybe because the convenience method I used was introduced with Java 1.6
Andreas_D