Uploaded image for project: 'JDK'
  1. JDK
  2. JDK-4360825

JVM crash on locale "C" by turn on/off enableInputMethods

XMLWordPrintable

    • Icon: Bug Bug
    • Resolution: Fixed
    • Icon: P3 P3
    • 1.3.1
    • 1.3.0
    • client-libs
    • ladybird
    • sparc
    • solaris_7



        Name: dc32491 Date: 08/08/2000


        Followings are steps for to reproduce the problem.

        1. Make&compile attached demo program.
         * untitled1/Application1.java
         * untitled1/Frame1.java
         * untitled1/Frame1_AboutBox.java
        2. Execute demo program.
         # login CDE by locale "C".
         % java untitled1.Application1
        3. Click "jTextArea1".
        4. Choice [Help|About] from Menu.
        5. Click [OK] on "AboutBox".
        6. Choice [Help] from Menu.
        x. JVM crash with following message.

        <<< JVM crash message <<<
        # # An unexpected exception has been detected in native code outside the VM.# Program counter=0xfd1c0764
        #
        # Problematic Thread: prio=6 tid=0x2e0cf0 nid=0xb runnable
        #
        >>> JVM crash message >>>

        <<< untitled1/Application1.java <<<
        package untitled1;

        import javax.swing.UIManager;
        import java.awt.*;

        public class Application1 {
          boolean packFrame = false;

          /**Construct the application*/
          public Application1() {
            Frame1 frame = new Frame1();
            //Validate frames that have preset sizes
            //Pack frames that have useful preferred size info, e.g. from their layout
            if (packFrame) {
              frame.pack();
            }
            else {
              frame.validate();
            }
            //Center the window
            Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
            Dimension frameSize = frame.getSize();
            if (frameSize.height > screenSize.height) {
              frameSize.height = screenSize.height;
            }
            if (frameSize.width > screenSize.width) {
              frameSize.width = screenSize.width;
            }
            frame.setLocation((screenSize.width - frameSize.width) / 2, (screenSize.height - frameSize.height) / 2);
            frame.setVisible(true);
          }

          /**Main method*/
          public static void main(String[] args) {
            try {
        // UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
              UIManager.setLookAndFeel("javax.swing.plaf.metal.MetalLookAndFeel");
            }
            catch(Exception e) {
              e.printStackTrace();
            }
            new Application1();
          }
        >>> untitled1/Application1.java >>>

        <<< untitled1/Frame1.java <<<
        package untitled1;

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

        public class Frame1 extends JFrame {
          JPanel contentPane;
          JMenuBar jMenuBar1 = new JMenuBar();
          JMenu jMenuFile = new JMenu();
          JMenuItem jMenuFileExit = new JMenuItem();
          JMenu jMenuHelp = new JMenu();
          JMenuItem jMenuHelpAbout = new JMenuItem();
          BorderLayout borderLayout1 = new BorderLayout();

          /**Construct the frame*/
          public Frame1() {
            enableEvents(AWTEvent.WINDOW_EVENT_MASK);
            try {
              jbInit();
            }
            catch(Exception e) {
              e.printStackTrace();
            }
          }

          /**Component initialization*/
          private void jbInit() throws Exception {
            //setIconImage(Toolkit.getDefaultToolkit().createImage(Frame1.class.getResource("[Your Icon]")));
            contentPane = (JPanel) this.getContentPane();
            contentPane.setLayout(borderLayout1);
            this.setSize(new Dimension(400, 300));
            this.setTitle("Frame Title");
            jMenuFile.setText("File");
            jMenuFileExit.setText("Exit");
            jMenuFileExit.addActionListener(new ActionListener() {

              public void actionPerformed(ActionEvent e) {
                jMenuFileExit_actionPerformed(e);
              }
            });
            jMenuHelp.setText("Help");
            jMenuHelpAbout.setText("About");
            jMenuHelpAbout.addActionListener(new ActionListener() {

              public void actionPerformed(ActionEvent e) {
                jMenuHelpAbout_actionPerformed(e);
              }
            });
            jTextArea1.setText("jTextArea1");
            jMenuFile.add(jMenuFileExit);
            jMenuHelp.add(jMenuHelpAbout);
            jMenuBar1.add(jMenuFile);
            jMenuBar1.add(jMenuHelp);
            contentPane.add(jTextArea1, BorderLayout.CENTER);
            this.setJMenuBar(jMenuBar1);
          }

          /**File | Exit action performed*/
          public void jMenuFileExit_actionPerformed(ActionEvent e) {
            System.exit(0);
          }

          boolean bInputMethods = true;
          JTextArea jTextArea1 = new JTextArea();

          /**Help | About action performed*/
          public void jMenuHelpAbout_actionPerformed(ActionEvent e) {
            Frame1_AboutBox dlg = new Frame1_AboutBox(this);
            Dimension dlgSize = dlg.getPreferredSize();
            Dimension frmSize = getSize();
            Point loc = getLocation();
            dlg.setLocation((frmSize.width - dlgSize.width) / 2 + loc.x, (frmSize.height - dlgSize.height) / 2 + loc.y);
            dlg.setModal(true);
            dlg.show();
            bInputMethods = !bInputMethods;
            jTextArea1.enableInputMethods(bInputMethods);
          }

          /**Overridden so we can exit when window is closed*/
          protected void processWindowEvent(WindowEvent e) {
            super.processWindowEvent(e);
            if (e.getID() == WindowEvent.WINDOW_CLOSING) {
              jMenuFileExit_actionPerformed(null);
            }
          }
        >>> untitled1/Frame1.java >>>

        <<< untitled1/Frame1_AboutBox.java <<<
        package untitled1;

        import java.awt.*;
        import java.awt.event.*;
        import javax.swing.*;
        import javax.swing.border.*;

        public class Frame1_AboutBox extends JDialog implements ActionListener {

          JPanel panel1 = new JPanel();
          JPanel panel2 = new JPanel();
          JPanel insetsPanel1 = new JPanel();
          JPanel insetsPanel2 = new JPanel();
          JPanel insetsPanel3 = new JPanel();
          JButton button1 = new JButton();
          JLabel imageLabel = new JLabel();
          JLabel label1 = new JLabel();
          JLabel label2 = new JLabel();
          JLabel label3 = new JLabel();
          JLabel label4 = new JLabel();
          BorderLayout borderLayout1 = new BorderLayout();
          BorderLayout borderLayout2 = new BorderLayout();
          FlowLayout flowLayout1 = new FlowLayout();
          GridLayout gridLayout1 = new GridLayout();
          String product = "";
          String version = "1.0";
          String copyright = "Copyright (c) 2000";
          String comments = "";
          public Frame1_AboutBox(Frame parent) {
            super(parent);
            enableEvents(AWTEvent.WINDOW_EVENT_MASK);
            try {
              jbInit();
            }
            catch(Exception e) {
              e.printStackTrace();
            }
            pack();
          }

          /**Component initialization*/
          private void jbInit() throws Exception {
            //imageLabel.setIcon(new ImageIcon(Frame1_AboutBox.class.getResource("[Your Image]")));
            this.setTitle("About");
            setResizable(false);
            panel1.setLayout(borderLayout1);
            panel2.setLayout(borderLayout2);
            insetsPanel1.setLayout(flowLayout1);
            insetsPanel2.setLayout(flowLayout1);
            insetsPanel2.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10));
            gridLayout1.setRows(4);
            gridLayout1.setColumns(1);
            label1.setText(product);
            label2.setText(version);
            label3.setText(copyright);
            label4.setText(comments);
            insetsPanel3.setLayout(gridLayout1);
            insetsPanel3.setBorder(BorderFactory.createEmptyBorder(10, 60, 10, 10));
            button1.setText("Ok");
            button1.addActionListener(this);
            insetsPanel2.add(imageLabel, null);
            panel2.add(insetsPanel2, BorderLayout.WEST);
            this.getContentPane().add(panel1, null);
            insetsPanel3.add(label1, null);
            insetsPanel3.add(label2, null);
            insetsPanel3.add(label3, null);
            insetsPanel3.add(label4, null);
            panel2.add(insetsPanel3, BorderLayout.CENTER);
            insetsPanel1.add(button1, null);
            panel1.add(insetsPanel1, BorderLayout.SOUTH);
            panel1.add(panel2, BorderLayout.NORTH);
          }

          /**Overridden so we can exit when window is closed*/
          protected void processWindowEvent(WindowEvent e) {
            if (e.getID() == WindowEvent.WINDOW_CLOSING) {
              cancel();
            }
            super.processWindowEvent(e);
          }

          /**Close the dialog*/
          void cancel() {
            dispose();
          }

          /**Close the dialog on a button event*/
          public void actionPerformed(ActionEvent e) {
            if (e.getSource() == button1) {
              cancel();
            }
          }
        >>> untitled1/Frame1_AboutBox.java >>>
        (Review ID: 108058)
        ======================================================================

              naoto Naoto Sato
              duke J. Duke
              Votes:
              0 Vote for this issue
              Watchers:
              0 Start watching this issue

                Created:
                Updated:
                Resolved:
                Imported:
                Indexed: