简单的 JDialog 导致堆栈溢出
我正在 Netbeans 中编写一个可视化应用程序,并且遇到了对对话框的需求。我决定从 Netbeans 自动提供的 AboutBox
中复制代码段,却发现这两个代码都会导致抛出错误!
我似乎无法找到错误的根源,尽管这两个错误都是在对话框关闭时引起的。
为简单起见,因为我相信这两个错误是相关的,所以这是我的Dialog
。为了简洁起见,我省略了 initComponents()
和 main(从未被调用)方法,但 defaultCloseOperation 是 DISPOSE_ON_CLOSE
。
运行时我遇到堆栈溢出,我将在下面发布。
public class AddRecipe extends javax.swing.JDialog {
/** Creates new form AddRecipe */
public AddRecipe(java.awt.Frame parent, boolean modal) {
super(parent, modal);
initComponents();
}
AddRecipe(java.awt.Frame parent) {
super(parent);
initComponents();
}
private void cancelButtonMouseClicked(java.awt.event.MouseEvent evt) {
dispose();
}
// Variables declaration - do not modify
private javax.swing.JLabel Serves;
private javax.swing.JButton acceptButton;
private javax.swing.JButton cancelButton;
private javax.swing.JLabel jLabel1;
private javax.swing.JLabel jLabel2;
private javax.swing.JList jList1;
private javax.swing.JScrollPane jScrollPane1;
private javax.swing.JScrollPane jScrollPane2;
private javax.swing.JTextArea jTextArea1;
private javax.swing.JTextField nameTextField;
private javax.swing.JTextField servesTextField;
private javax.swing.JTextField timeTextField;
// End of variables declaration
}
堆栈跟踪:(
Exception in thread "AWT-EventQueue-0" java.lang.StackOverflowError
at sun.reflect.GeneratedMethodAccessor1.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:616)
at sun.reflect.misc.MethodUtil.invoke(MethodUtil.java:262)
at java.beans.Statement.invokeInternal(Statement.java:257)
at java.beans.Statement.access$000(Statement.java:56)
at java.beans.Statement$2.run(Statement.java:158)
at java.security.AccessController.doPrivileged(Native Method)
at java.beans.Statement.invoke(Statement.java:154)
at java.beans.Expression.getValue(Expression.java:115)
at java.beans.Encoder.getValue(Encoder.java:105)
at java.beans.Encoder.get(Encoder.java:225)
at java.beans.PersistenceDelegate.writeObject(PersistenceDelegate.java:110)
at java.beans.Encoder.writeObject(Encoder.java:74)
at java.beans.XMLEncoder.writeObject(XMLEncoder.java:274)
at java.beans.Encoder.writeExpression(Encoder.java:304)
at java.beans.XMLEncoder.writeExpression(XMLEncoder.java:389)
at java.beans.DefaultPersistenceDelegate.doProperty(DefaultPersistenceDelegate.java:229)
at java.beans.DefaultPersistenceDelegate.initBean(DefaultPersistenceDelegate.java:264)
at java.beans.DefaultPersistenceDelegate.initialize(DefaultPersistenceDelegate.java:408)
at java.beans.PersistenceDelegate.writeObject(PersistenceDelegate.java:116)
at java.beans.Encoder.writeObject(Encoder.java:74)
at java.beans.XMLEncoder.writeObject(XMLEncoder.java:274)
at java.beans.Encoder.writeExpression(Encoder.java:304)
at java.beans.XMLEncoder.writeExpression(XMLEncoder.java:389)
at java.beans.DefaultPersistenceDelegate.doProperty(DefaultPersistenceDelegate.java:229)
at java.beans.DefaultPersistenceDelegate.initBean(DefaultPersistenceDelegate.java:264)
at java.beans.DefaultPersistenceDelegate.initialize(DefaultPersistenceDelegate.java:408)
堆栈跟踪重复数百次)。
为了完整起见,这里是调用对话框的函数。同样,此代码是根据默认 Netbeans 行为建模的(即使提供的 AboutBox Netbeans 会导致 java.lang.reflect.InitationTargetException
)。
private void newRecipeItemActionPerformed(java.awt.event.ActionEvent evt) {
if (addRecipe == null) {
JFrame mainFrame = RecipesApp.getApplication().getMainFrame();
addRecipe = new AddRecipe(mainFrame);
addRecipe.setLocationRelativeTo(mainFrame);
}
RecipesApp.getApplication().show(addRecipe);
}
I'm writing a visual application in Netbeans, and came across the need for a dialog box. I decided to copy sections of code from the AboutBox
that Netbeans provides automatically, only to discover that both of these are causing errors to be thrown!
I cannot seem to hunt down the source of the errors, although both are caused when the dialogs are closed.
For simplicity, since I believe that both bugs are related, here is my Dialog
. I've omitted the initComponents()
and main (which is never called) methods for brevity, but the defaultCloseOperation is DISPOSE_ON_CLOSE
.
When running I get a stack overflow, which I'll post below.
public class AddRecipe extends javax.swing.JDialog {
/** Creates new form AddRecipe */
public AddRecipe(java.awt.Frame parent, boolean modal) {
super(parent, modal);
initComponents();
}
AddRecipe(java.awt.Frame parent) {
super(parent);
initComponents();
}
private void cancelButtonMouseClicked(java.awt.event.MouseEvent evt) {
dispose();
}
// Variables declaration - do not modify
private javax.swing.JLabel Serves;
private javax.swing.JButton acceptButton;
private javax.swing.JButton cancelButton;
private javax.swing.JLabel jLabel1;
private javax.swing.JLabel jLabel2;
private javax.swing.JList jList1;
private javax.swing.JScrollPane jScrollPane1;
private javax.swing.JScrollPane jScrollPane2;
private javax.swing.JTextArea jTextArea1;
private javax.swing.JTextField nameTextField;
private javax.swing.JTextField servesTextField;
private javax.swing.JTextField timeTextField;
// End of variables declaration
}
Stack trace:
Exception in thread "AWT-EventQueue-0" java.lang.StackOverflowError
at sun.reflect.GeneratedMethodAccessor1.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:616)
at sun.reflect.misc.MethodUtil.invoke(MethodUtil.java:262)
at java.beans.Statement.invokeInternal(Statement.java:257)
at java.beans.Statement.access$000(Statement.java:56)
at java.beans.Statement$2.run(Statement.java:158)
at java.security.AccessController.doPrivileged(Native Method)
at java.beans.Statement.invoke(Statement.java:154)
at java.beans.Expression.getValue(Expression.java:115)
at java.beans.Encoder.getValue(Encoder.java:105)
at java.beans.Encoder.get(Encoder.java:225)
at java.beans.PersistenceDelegate.writeObject(PersistenceDelegate.java:110)
at java.beans.Encoder.writeObject(Encoder.java:74)
at java.beans.XMLEncoder.writeObject(XMLEncoder.java:274)
at java.beans.Encoder.writeExpression(Encoder.java:304)
at java.beans.XMLEncoder.writeExpression(XMLEncoder.java:389)
at java.beans.DefaultPersistenceDelegate.doProperty(DefaultPersistenceDelegate.java:229)
at java.beans.DefaultPersistenceDelegate.initBean(DefaultPersistenceDelegate.java:264)
at java.beans.DefaultPersistenceDelegate.initialize(DefaultPersistenceDelegate.java:408)
at java.beans.PersistenceDelegate.writeObject(PersistenceDelegate.java:116)
at java.beans.Encoder.writeObject(Encoder.java:74)
at java.beans.XMLEncoder.writeObject(XMLEncoder.java:274)
at java.beans.Encoder.writeExpression(Encoder.java:304)
at java.beans.XMLEncoder.writeExpression(XMLEncoder.java:389)
at java.beans.DefaultPersistenceDelegate.doProperty(DefaultPersistenceDelegate.java:229)
at java.beans.DefaultPersistenceDelegate.initBean(DefaultPersistenceDelegate.java:264)
at java.beans.DefaultPersistenceDelegate.initialize(DefaultPersistenceDelegate.java:408)
(Stack trace repeats a few hundred more times).
And for completeness, here is the function that calls the Dialog. Again, this code is modeled off of the default Netbeans behavior, (even though the AboutBox Netbeans provided causes a java.lang.reflect.InvocationTargetException
).
private void newRecipeItemActionPerformed(java.awt.event.ActionEvent evt) {
if (addRecipe == null) {
JFrame mainFrame = RecipesApp.getApplication().getMainFrame();
addRecipe = new AddRecipe(mainFrame);
addRecipe.setLocationRelativeTo(mainFrame);
}
RecipesApp.getApplication().show(addRecipe);
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
正如 Ashton K 在评论中提到的,这个问题可以通过迁移到 Oracle 版本的 JDK 来解决。所以这个问题是至少运行他的特定版本的 OpenJDK 的问题。
As Ashton K mentions in the comments, this problem can be resolved by moving to the Oracle version of the JDK. So this problem is an issue with running at least his specific version of OpenJDK.