-
Bug
-
Resolution: Duplicate
-
P3
-
None
-
6u17
-
sparc
-
solaris_10
FULL PRODUCT VERSION :
java version "1.6.0_11"
Java(TM) SE Runtime Environment (build 1.6.0_11-b03)
Java HotSpot(TM) Server VM (build 11.0-b16, mixed mode)
problems still exist in 1.6.0_17
ADDITIONAL OS VERSION INFORMATION :
SunOS cowboy 5.10 Generic_137137-09 sun4v sparc SUNW,Sun-Blade-T6320
EXTRA RELEVANT SYSTEM CONFIGURATION :
We are using solaris (as stated above) with go-global and the CDE environment.
A DESCRIPTION OF THE PROBLEM :
We have upgraded all or swing/awt UIs from 1.5.0_16 to 1.6.0_11 (problems still exist in 1.6.0_17). We now experience this issue:
- A JFrame is launched from the terminal (java ...)
- A modal dialog is brought to front then dismissed
- Instead of the jframe being brought to front **sometimes** the terminal comes to front.
I cannot reproduce this behavior in the 1.5 jre or on a windows platform.
STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
Create a JFrame that displays a modal dialog then
- In Solaris using CDE launch the JFrame from a terminal
- Then launch the modal dialog
- Dismiss the modal dialog
- Verify that the terminal (or some window other than the JFrame) comes to
front. (It sometimes does not happen on the first try)
EXPECTED VERSUS ACTUAL BEHAVIOR :
EXPECTED -
In Java 5 the above steps would result in the JFrame (or the modal dialogs parent window) to be brought back to the front.
ACTUAL -
In Java 6 it is unpredictable which window further down in the visual stack will come to front when the dialog is dismissed.
ERROR MESSAGES/STACK TRACES THAT OCCUR :
No error messages.
REPRODUCIBILITY :
This bug can be reproduced always.
---------- BEGIN SOURCE ----------
import java.awt.BorderLayout;
import javax.swing.JPanel;
import javax.swing.JFrame;
import java.awt.Dimension;
import java.awt.GridBagLayout;
import javax.swing.JTextArea;
import java.awt.GridBagConstraints;
import javax.swing.JLabel;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
public class BaseFrame extends JFrame{
private static final long serialVersionUID = 1L;
private JPanel jContentPane = null;
private JPanel mainPanel = null;
private JTextArea jTextArea = null;
private JLabel jLabel = null;
private JButton jButton = null;
private JPanel buttonPanel = null;
/**
* This is the default constructor
*/
public BaseFrame() {
super();
initialize();
}
/**
* This method initializes this
*
* @return void
*/
private void initialize() {
this.setSize(800, 600);
this.setContentPane(getJContentPane());
this.setTitle("This App Shows Buggy Windowing System!");
}
/**
* This method initializes jContentPane
*
* @return javax.swing.JPanel
*/
private JPanel getJContentPane() {
if (jContentPane == null) {
jContentPane = new JPanel();
jContentPane.setLayout(new BorderLayout());
jContentPane.add(getMainPanel(), BorderLayout.CENTER);
}
return jContentPane;
}
/**
* This method initializes mainPanel
*
* @return javax.swing.JPanel
*/
private JPanel getMainPanel() {
if (mainPanel == null) {
GridBagConstraints gridBagConstraints3 = new GridBagConstraints();
gridBagConstraints3.gridx = 0;
gridBagConstraints3.gridy = 2;
GridBagConstraints gridBagConstraints1 = new GridBagConstraints();
gridBagConstraints1.gridx = 0;
gridBagConstraints1.gridy = 0;
jLabel = new JLabel();
jLabel.setText("Description of the Problem");
jLabel.setFont(new Font("Dialog", Font.BOLD, 24));
GridBagConstraints gridBagConstraints = new GridBagConstraints();
gridBagConstraints.fill = GridBagConstraints.BOTH;
gridBagConstraints.weighty = 1.0;
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 1;
gridBagConstraints.gridheight = 1;
gridBagConstraints.weightx = 1.0;
mainPanel = new JPanel();
mainPanel.setLayout(new GridBagLayout());
mainPanel.add(getJTextArea(), gridBagConstraints);
mainPanel.add(jLabel, gridBagConstraints1);
mainPanel.add(getButtonPanel(), gridBagConstraints3);
}
return mainPanel;
}
/**
* This method initializes jTextArea
*
* @return javax.swing.JTextArea
*/
private JTextArea getJTextArea() {
if (jTextArea == null) {
jTextArea = new JTextArea();
jTextArea.setText("We have upgraded all or swing/awt UIs from 1.5.0_16 to 1.6.0_11 (problems still exist in 1.6.0_17). \nWe now experience this issue:\n- A JFrame is launched from the terminal (java ...)\n- A modal dialog is brought to front then dismissed\n- Instead of the jframe being brought to front **sometimes** the terminal comes to front.\n\nI cannot reproduce this behavior in the 1.5 jre or on a windows platform.");
jTextArea.setPreferredSize(new Dimension(200, 112));
jTextArea.setName("Description of the Problem");
}
return jTextArea;
}
/**
* This method initializes jButton
*
* @return javax.swing.JButton
*/
private JButton getJButton() {
if (jButton == null) {
jButton = new JButton();
jButton.setText("Launch Modal Dialog");
jButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
//Show Modal Dialog
ModalDialog mdlg = new ModalDialog(BaseFrame.this);
mdlg.showDialog();
}
});
}
return jButton;
}
/**
* This method initializes buttonPanel
*
* @return javax.swing.JPanel
*/
private JPanel getButtonPanel() {
if (buttonPanel == null) {
GridBagConstraints gridBagConstraints2 = new GridBagConstraints();
gridBagConstraints2.fill = GridBagConstraints.BOTH;
gridBagConstraints2.gridx = -1;
gridBagConstraints2.gridy = -1;
gridBagConstraints2.gridheight = 2;
buttonPanel = new JPanel();
buttonPanel.setLayout(new BorderLayout());
buttonPanel.add(getJButton(), BorderLayout.CENTER);
}
return buttonPanel;
}
public static void main(String[] args) {
BaseFrame frm = new BaseFrame();
frm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frm.setVisible(true);
}
}
/******************************************************************
Seperate Class
******************************************************************/
import javax.swing.JPanel;
import java.awt.Frame;
import java.awt.BorderLayout;
import javax.swing.JDialog;
import java.awt.GridBagLayout;
import java.awt.GridBagConstraints;
import javax.swing.JButton;
import javax.swing.JTextArea;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class ModalDialog extends JDialog {
private static final long serialVersionUID = 1L;
private JPanel jContentPane = null;
private JPanel textPanel = null;
private JPanel buttonPanel = null;
private JButton jButton = null;
private JTextArea jTextArea = null;
/**
* @param owner
*/
public ModalDialog(Frame owner) {
super(owner);
}
/**
* This method initializes this
*
* @return void
*/
private void initialize() {
this.setSize(376, 200);
this.setTitle("This is a Modal Dialog");
this.setModal(true);
this.setContentPane(getJContentPane());
}
public void showDialog(){
initialize();
this.setVisible(true);
}
/**
* Shuts down the window
*/
private void closeWindow() {
setVisible(false);
dispose();
}
/**
* This method initializes jContentPane
*
* @return javax.swing.JPanel
*/
private JPanel getJContentPane() {
if (jContentPane == null) {
jContentPane = new JPanel();
jContentPane.setLayout(new BorderLayout());
jContentPane.add(getTextPanel(), BorderLayout.CENTER);
jContentPane.add(getButtonPanel(), BorderLayout.SOUTH);
}
return jContentPane;
}
/**
* This method initializes textPanel
*
* @return javax.swing.JPanel
*/
private JPanel getTextPanel() {
if (textPanel == null) {
textPanel = new JPanel();
textPanel.setLayout(new BorderLayout());
textPanel.add(getJTextArea(), BorderLayout.CENTER);
}
return textPanel;
}
/**
* This method initializes buttonPanel
*
* @return javax.swing.JPanel
*/
private JPanel getButtonPanel() {
if (buttonPanel == null) {
buttonPanel = new JPanel();
buttonPanel.setLayout(new GridBagLayout());
buttonPanel.add(getJButton(), new GridBagConstraints());
}
return buttonPanel;
}
/**
* This method initializes jButton
*
* @return javax.swing.JButton
*/
private JButton getJButton() {
if (jButton == null) {
jButton = new JButton();
jButton.setText("Dismiss Dialog");
jButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
closeWindow();
}
});
}
return jButton;
}
/**
* This method initializes jTextArea
*
* @return javax.swing.JTextArea
*/
private JTextArea getJTextArea() {
if (jTextArea == null) {
jTextArea = new JTextArea();
jTextArea.setText("Go ahead and dismiss me and see which window comes to front!");
}
return jTextArea;
}
} // @jve:decl-index=0:visual-constraint="10,10"
---------- END SOURCE ----------
CUSTOMER SUBMITTED WORKAROUND :
Using java 1.5.X or older resolves the issue (which is not possible in our case).
SUPPORT :
YES
Release Regression From : 6u10
The above release value was the last known release where this
bug was not reproducible. Since then there has been a regression.
java version "1.6.0_11"
Java(TM) SE Runtime Environment (build 1.6.0_11-b03)
Java HotSpot(TM) Server VM (build 11.0-b16, mixed mode)
problems still exist in 1.6.0_17
ADDITIONAL OS VERSION INFORMATION :
SunOS cowboy 5.10 Generic_137137-09 sun4v sparc SUNW,Sun-Blade-T6320
EXTRA RELEVANT SYSTEM CONFIGURATION :
We are using solaris (as stated above) with go-global and the CDE environment.
A DESCRIPTION OF THE PROBLEM :
We have upgraded all or swing/awt UIs from 1.5.0_16 to 1.6.0_11 (problems still exist in 1.6.0_17). We now experience this issue:
- A JFrame is launched from the terminal (java ...)
- A modal dialog is brought to front then dismissed
- Instead of the jframe being brought to front **sometimes** the terminal comes to front.
I cannot reproduce this behavior in the 1.5 jre or on a windows platform.
STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
Create a JFrame that displays a modal dialog then
- In Solaris using CDE launch the JFrame from a terminal
- Then launch the modal dialog
- Dismiss the modal dialog
- Verify that the terminal (or some window other than the JFrame) comes to
front. (It sometimes does not happen on the first try)
EXPECTED VERSUS ACTUAL BEHAVIOR :
EXPECTED -
In Java 5 the above steps would result in the JFrame (or the modal dialogs parent window) to be brought back to the front.
ACTUAL -
In Java 6 it is unpredictable which window further down in the visual stack will come to front when the dialog is dismissed.
ERROR MESSAGES/STACK TRACES THAT OCCUR :
No error messages.
REPRODUCIBILITY :
This bug can be reproduced always.
---------- BEGIN SOURCE ----------
import java.awt.BorderLayout;
import javax.swing.JPanel;
import javax.swing.JFrame;
import java.awt.Dimension;
import java.awt.GridBagLayout;
import javax.swing.JTextArea;
import java.awt.GridBagConstraints;
import javax.swing.JLabel;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
public class BaseFrame extends JFrame{
private static final long serialVersionUID = 1L;
private JPanel jContentPane = null;
private JPanel mainPanel = null;
private JTextArea jTextArea = null;
private JLabel jLabel = null;
private JButton jButton = null;
private JPanel buttonPanel = null;
/**
* This is the default constructor
*/
public BaseFrame() {
super();
initialize();
}
/**
* This method initializes this
*
* @return void
*/
private void initialize() {
this.setSize(800, 600);
this.setContentPane(getJContentPane());
this.setTitle("This App Shows Buggy Windowing System!");
}
/**
* This method initializes jContentPane
*
* @return javax.swing.JPanel
*/
private JPanel getJContentPane() {
if (jContentPane == null) {
jContentPane = new JPanel();
jContentPane.setLayout(new BorderLayout());
jContentPane.add(getMainPanel(), BorderLayout.CENTER);
}
return jContentPane;
}
/**
* This method initializes mainPanel
*
* @return javax.swing.JPanel
*/
private JPanel getMainPanel() {
if (mainPanel == null) {
GridBagConstraints gridBagConstraints3 = new GridBagConstraints();
gridBagConstraints3.gridx = 0;
gridBagConstraints3.gridy = 2;
GridBagConstraints gridBagConstraints1 = new GridBagConstraints();
gridBagConstraints1.gridx = 0;
gridBagConstraints1.gridy = 0;
jLabel = new JLabel();
jLabel.setText("Description of the Problem");
jLabel.setFont(new Font("Dialog", Font.BOLD, 24));
GridBagConstraints gridBagConstraints = new GridBagConstraints();
gridBagConstraints.fill = GridBagConstraints.BOTH;
gridBagConstraints.weighty = 1.0;
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 1;
gridBagConstraints.gridheight = 1;
gridBagConstraints.weightx = 1.0;
mainPanel = new JPanel();
mainPanel.setLayout(new GridBagLayout());
mainPanel.add(getJTextArea(), gridBagConstraints);
mainPanel.add(jLabel, gridBagConstraints1);
mainPanel.add(getButtonPanel(), gridBagConstraints3);
}
return mainPanel;
}
/**
* This method initializes jTextArea
*
* @return javax.swing.JTextArea
*/
private JTextArea getJTextArea() {
if (jTextArea == null) {
jTextArea = new JTextArea();
jTextArea.setText("We have upgraded all or swing/awt UIs from 1.5.0_16 to 1.6.0_11 (problems still exist in 1.6.0_17). \nWe now experience this issue:\n- A JFrame is launched from the terminal (java ...)\n- A modal dialog is brought to front then dismissed\n- Instead of the jframe being brought to front **sometimes** the terminal comes to front.\n\nI cannot reproduce this behavior in the 1.5 jre or on a windows platform.");
jTextArea.setPreferredSize(new Dimension(200, 112));
jTextArea.setName("Description of the Problem");
}
return jTextArea;
}
/**
* This method initializes jButton
*
* @return javax.swing.JButton
*/
private JButton getJButton() {
if (jButton == null) {
jButton = new JButton();
jButton.setText("Launch Modal Dialog");
jButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
//Show Modal Dialog
ModalDialog mdlg = new ModalDialog(BaseFrame.this);
mdlg.showDialog();
}
});
}
return jButton;
}
/**
* This method initializes buttonPanel
*
* @return javax.swing.JPanel
*/
private JPanel getButtonPanel() {
if (buttonPanel == null) {
GridBagConstraints gridBagConstraints2 = new GridBagConstraints();
gridBagConstraints2.fill = GridBagConstraints.BOTH;
gridBagConstraints2.gridx = -1;
gridBagConstraints2.gridy = -1;
gridBagConstraints2.gridheight = 2;
buttonPanel = new JPanel();
buttonPanel.setLayout(new BorderLayout());
buttonPanel.add(getJButton(), BorderLayout.CENTER);
}
return buttonPanel;
}
public static void main(String[] args) {
BaseFrame frm = new BaseFrame();
frm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frm.setVisible(true);
}
}
/******************************************************************
Seperate Class
******************************************************************/
import javax.swing.JPanel;
import java.awt.Frame;
import java.awt.BorderLayout;
import javax.swing.JDialog;
import java.awt.GridBagLayout;
import java.awt.GridBagConstraints;
import javax.swing.JButton;
import javax.swing.JTextArea;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class ModalDialog extends JDialog {
private static final long serialVersionUID = 1L;
private JPanel jContentPane = null;
private JPanel textPanel = null;
private JPanel buttonPanel = null;
private JButton jButton = null;
private JTextArea jTextArea = null;
/**
* @param owner
*/
public ModalDialog(Frame owner) {
super(owner);
}
/**
* This method initializes this
*
* @return void
*/
private void initialize() {
this.setSize(376, 200);
this.setTitle("This is a Modal Dialog");
this.setModal(true);
this.setContentPane(getJContentPane());
}
public void showDialog(){
initialize();
this.setVisible(true);
}
/**
* Shuts down the window
*/
private void closeWindow() {
setVisible(false);
dispose();
}
/**
* This method initializes jContentPane
*
* @return javax.swing.JPanel
*/
private JPanel getJContentPane() {
if (jContentPane == null) {
jContentPane = new JPanel();
jContentPane.setLayout(new BorderLayout());
jContentPane.add(getTextPanel(), BorderLayout.CENTER);
jContentPane.add(getButtonPanel(), BorderLayout.SOUTH);
}
return jContentPane;
}
/**
* This method initializes textPanel
*
* @return javax.swing.JPanel
*/
private JPanel getTextPanel() {
if (textPanel == null) {
textPanel = new JPanel();
textPanel.setLayout(new BorderLayout());
textPanel.add(getJTextArea(), BorderLayout.CENTER);
}
return textPanel;
}
/**
* This method initializes buttonPanel
*
* @return javax.swing.JPanel
*/
private JPanel getButtonPanel() {
if (buttonPanel == null) {
buttonPanel = new JPanel();
buttonPanel.setLayout(new GridBagLayout());
buttonPanel.add(getJButton(), new GridBagConstraints());
}
return buttonPanel;
}
/**
* This method initializes jButton
*
* @return javax.swing.JButton
*/
private JButton getJButton() {
if (jButton == null) {
jButton = new JButton();
jButton.setText("Dismiss Dialog");
jButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
closeWindow();
}
});
}
return jButton;
}
/**
* This method initializes jTextArea
*
* @return javax.swing.JTextArea
*/
private JTextArea getJTextArea() {
if (jTextArea == null) {
jTextArea = new JTextArea();
jTextArea.setText("Go ahead and dismiss me and see which window comes to front!");
}
return jTextArea;
}
} // @jve:decl-index=0:visual-constraint="10,10"
---------- END SOURCE ----------
CUSTOMER SUBMITTED WORKAROUND :
Using java 1.5.X or older resolves the issue (which is not possible in our case).
SUPPORT :
YES
Release Regression From : 6u10
The above release value was the last known release where this
bug was not reproducible. Since then there has been a regression.
- duplicates
-
JDK-6262392 Problem with dismissing dialogs on CDE with XToolkit
-
- Closed
-