如果我使用JDK1.8_40或更新版本(Oracle或OpenJDK都一样),那么下面的代码和对话框大小调整会导致应用程序崩溃(在Windows 7、x64、64位JDK上尝试过)
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JPanel;
import javax.swing.JWindow;
import javax.swing.SwingUtilities;
import javax.swing.Timer;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class Main {
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
final JDialog dialog = new JDialog();
dialog.add(new JPanel());
dialog.setVisible(true);
dialog.setBounds(100, 100, 100, 100);
final JWindow dependentWindow = getjWindow(dialog);
dependentWindow.setVisible(true);
dependentWindow.setBounds(100, 100, 100, 100);
Timer t = new Timer(300, new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
dependentWindow.setVisible(!dependentWindow.isVisible());
}
});
t.start();
}
});
}
private static JWindow getjWindow(JDialog dialog) {
JWindow w = new JWindow(dialog);
JPanel panel = new JPanel();
panel.add(new JButton("button"));
w.add(panel);
return w;
}
}
我还没有发现其他关于这个问题的投诉,并且还没有在Oracle网站上发布错误报告。一个可能的解决方法是将JWindow更改为无修饰的JDialog,但这会给我带来其他问题,所以我暂时不会更改。
还有其他人遇到过这个问题并找到了解决方法吗?
添加了堆栈信息:
WARN 2015-05-04 15:21:21,707 - AWT-EventQueue-0, Id = 17, Priority = 6: RUNNABLE
sun.awt.windows.WWindowPeer.reshapeFrame(Native Method)
sun.awt.windows.WDialogPeer.reshape(Unknown Source)
sun.awt.windows.WComponentPeer.setBounds(Unknown Source)
sun.awt.windows.WWindowPeer.setBounds(Unknown Source)
java.awt.Component.reshapeNativePeer(Unknown Source)
java.awt.Component.reshape(Unknown Source)
java.awt.Window.reshape(Unknown Source)
java.awt.Component.setBounds(Unknown Source)
java.awt.Window.setBounds(Unknown Source)
java.awt.Component.resize(Unknown Source)
java.awt.Component.setSize(Unknown Source)
java.awt.Window.setSize(Unknown Source)
Windows问题详细信息(显示2个错误):
Problem signature:
Problem Event Name: BEX64
Application Name: java.exe
Application Version: 8.0.60.13
Application Timestamp: 55404a69
Fault Module Name: StackHash_08b3
Fault Module Version: 0.0.0.0
Fault Module Timestamp: 00000000
Exception Offset: 0000000300000002
Exception Code: c0000005
Exception Data: 0000000000000008
OS Version: 6.1.7601.2.1.0.256.48
Locale ID: 1033
Additional Information 1: 08b3
Additional Information 2: 08b36dcca93c38acb7c92ef4a729e798
Additional Information 3: 5d68
Additional Information 4: 5d682eddcc7a5d6b5452fc95535d5ac9
第二个:
Problem signature:
Problem Event Name: APPCRASH
Application Name: java.exe
Application Version: 8.0.60.13
Application Timestamp: 55404a69
Fault Module Name: StackHash_d693
Fault Module Version: 0.0.0.0
Fault Module Timestamp: 00000000
Exception Code: c000041d
Exception Offset: 0000000300000002
OS Version: 6.1.7601.2.1.0.256.48
Locale ID: 1033
Additional Information 1: d693
Additional Information 2: d6933f192f50114566e03a88a59a6417
Additional Information 3: 9096
Additional Information 4: 9096dfe271c183defc2620e74bdaec28