问题描述
我不确定这是仅在我的机器上发生还是在什么地方发生,但是该错误似乎很有趣,因此我将其发布在此处以查看是否有人遇到它。如果有人愿意找出原因或对其进行测试,那就太好了。
顺便说一句,类似的问题here。可能是相同的错误,但不太确定。尽管那似乎发生在Nvidia上,但我正在使用AMD。 (虽然它是相同的错误,但是会在6年后仍然存在,这将是非常有趣的。)
请注意,我正在使用JDK 15.0.1。
错误解释
我在NetBeans中创建的一个简单的Swing应用程序:
这个很好用:
单击底部的组合框后呈现错误。然后该错误仅停留在光标所在的位置,因为它会导致重新绘制。如果我调整大小,最小化或将窗口移到任务栏下方并备份,则可以修复该问题:
但是,如果未修复该错误而关闭了该窗口,则该错误会永远永远保留在同一应用程序中的其他打开的窗口中,并且无法修复。 (至少从我尝试过的情况来看。)
在构建我自己的应用程序时遇到此错误。有一些业余时间,所以我花了一些时间看看是什么触发了它。
触发条件
- 需要在应用程序底部具有一个组合框,以便菜单位于窗口之外。
- 需要在窗口中显示一个textArea。在删除textArea之后,该错误消失了。 (它可能需要像示例中那样放在一边。尚未测试它的布局是否重要)。 (它也可能与scrollPane有关,还没有对其进行测试。)
我测试过的东西
- 主题无关紧要,因此,如果您使用“ Windows”或“ Nimbus”运行它,该错误仍然存在。
- 父级无关紧要,仍然可以通过直接调用它或从另一个jframe调用它来实现。
- 它也发生在jdialog上。
- [编辑] 在有和没有可运行事件队列的情况下进行了测试。
代码
您可以复制并粘贴下面的代码,或者直接在NetBeans上下载并运行该项目。 (我使用的是12.1版):https://drive.google.com/file/d/1PyrQ4IVYe5xDfXiXSip0rifxPbatKKcT/view
package javaapplication1;
public class JavaApplication1 {
public static void main(String[] args){
try
{
for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels())
{
if ("Windows".equals(info.getName()))
{
javax.swing.UIManager.setLookAndFeel(info.getClassName());
break;
}
}
}
catch (ClassNotFoundException ex) {java.util.logging.Logger.getLogger(NewJFrame.class.getName()).log(java.util.logging.Level.SEVERE,null,ex);}
catch (InstantiationException ex) {java.util.logging.Logger.getLogger(NewJFrame.class.getName()).log(java.util.logging.Level.SEVERE,ex);}
catch (illegalaccessexception ex) {java.util.logging.Logger.getLogger(NewJFrame.class.getName()).log(java.util.logging.Level.SEVERE,ex);}
catch (javax.swing.UnsupportedLookAndFeelException ex) {java.util.logging.Logger.getLogger(NewJFrame.class.getName()).log(java.util.logging.Level.SEVERE,ex);}
NewJFrame frame = new NewJFrame();
java.awt.EventQueue.invokelater(new Runnable() {
public void run() {
new NewJFrame().setVisible(true);
}
});
}
}
package javaapplication1;
public class NewJFrame extends javax.swing.JFrame {
public NewJFrame() {
initComponents();
}
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">
private void initComponents() {
jPanel8 = new javax.swing.JPanel();
jPanel7 = new javax.swing.JPanel();
jPanel2 = new javax.swing.JPanel();
filler3 = new javax.swing.Box.Filler(new java.awt.Dimension(50,0),new java.awt.Dimension(50,300));
jButton2 = new javax.swing.JButton();
filler20 = new javax.swing.Box.Filler(new java.awt.Dimension(50,300));
jComboBox2 = new javax.swing.JComboBox<>();
filler5 = new javax.swing.Box.Filler(new java.awt.Dimension(50,300));
filler4 = new javax.swing.Box.Filler(new java.awt.Dimension(0,new java.awt.Dimension(0,32767));
jPanel1 = new javax.swing.JPanel();
filler2 = new javax.swing.Box.Filler(new java.awt.Dimension(50,300));
jButton1 = new javax.swing.JButton();
filler19 = new javax.swing.Box.Filler(new java.awt.Dimension(50,300));
jComboBox1 = new javax.swing.JComboBox<>();
filler1 = new javax.swing.Box.Filler(new java.awt.Dimension(50,300));
jScrollPane1 = new javax.swing.JScrollPane();
jTextArea1 = new javax.swing.JTextArea();
setDefaultCloSEOperation(javax.swing.WindowConstants.disPOSE_ON_CLOSE);
setTitle("Test");
setPreferredSize(new java.awt.Dimension(550,400));
getContentPane().setLayout(new javax.swing.BoxLayout(getContentPane(),javax.swing.BoxLayout.LINE_AXIS));
jPanel8.setLayout(new javax.swing.BoxLayout(jPanel8,javax.swing.BoxLayout.X_AXIS));
jPanel7.setLayout(new javax.swing.BoxLayout(jPanel7,javax.swing.BoxLayout.Y_AXIS));
jPanel2.setLayout(new javax.swing.BoxLayout(jPanel2,javax.swing.BoxLayout.X_AXIS));
jPanel2.add(filler3);
jButton2.setText("jButton1");
jButton2.setAlignmentX(0.5F);
jPanel2.add(jButton2);
jPanel2.add(filler20);
jComboBox2.setModel(new javax.swing.DefaultComboBoxModel<>(new String[] { "Item 1","Item 2","Item 3","Item 4","Item 5","Item 6","Item 7" }));
jComboBox2.setMaximumSize(new java.awt.Dimension(32767,20));
jPanel2.add(jComboBox2);
jPanel2.add(filler5);
jPanel7.add(jPanel2);
jPanel7.add(filler4);
jPanel1.setLayout(new javax.swing.BoxLayout(jPanel1,javax.swing.BoxLayout.X_AXIS));
jPanel1.add(filler2);
jButton1.setText("jButton1");
jPanel1.add(jButton1);
jPanel1.add(filler19);
jComboBox1.setModel(new javax.swing.DefaultComboBoxModel<>(new String[] { "Item 1","Item 7" }));
jComboBox1.setMaximumSize(new java.awt.Dimension(32767,20));
jPanel1.add(jComboBox1);
jPanel1.add(filler1);
jPanel7.add(jPanel1);
jPanel8.add(jPanel7);
jTextArea1.setColumns(20);
jTextArea1.setRows(5);
jScrollPane1.setViewportView(jTextArea1);
jPanel8.add(jScrollPane1);
getContentPane().add(jPanel8);
pack();
setLocationRelativeto(null);
}// </editor-fold>
// Variables declaration - do not modify
private javax.swing.Box.Filler filler1;
private javax.swing.Box.Filler filler19;
private javax.swing.Box.Filler filler2;
private javax.swing.Box.Filler filler20;
private javax.swing.Box.Filler filler3;
private javax.swing.Box.Filler filler4;
private javax.swing.Box.Filler filler5;
private javax.swing.JButton jButton1;
private javax.swing.JButton jButton2;
private javax.swing.JComboBox<String> jComboBox1;
private javax.swing.JComboBox<String> jComboBox2;
private javax.swing.JPanel jPanel1;
private javax.swing.JPanel jPanel2;
private javax.swing.JPanel jPanel7;
private javax.swing.JPanel jPanel8;
private javax.swing.JScrollPane jScrollPane1;
private javax.swing.JTextArea jTextArea1;
// End of variables declaration
}
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)