私はNetbeansでビジュアルアプリケーションを作成しており、ダイアログボックスが必要です。私は、Netbeansが自動的に提供するAboutBox
のコードのセクションをコピーすることに決めました。これは、これらの両方が原因でエラーが発生することを発見しただけです。単純なJDialogが原因でスタックオーバーフローが発生する
エラーの原因を特定することはできませんが、両方ともダイアログが閉じられたときに発生します。
両方のバグが関連していると思いますので、ここに私のDialog
があります。私は簡略化のためにinitComponents()
とメインメソッドを省略しましたが、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)
(スタックトレースは数百回以上繰り返されます)。
完全性のために、ここではダイアログを呼び出す関数があります。繰り返しますが、このコードは、提供されるAboutBox Netbeansがjava.lang.reflect.InvocationTargetException
を引き起こしても、デフォルトのNetbeansの動作からモデル化されています。
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);
}
なぜスタックトレースにXMLがあるのですか?この単純なJDialogを別の小さなプロジェクト(大きなプロジェクトの一部ではない)として実行しようとしましたか? –
別々に運行しようとしましたが、運がありません。 XMLはプロジェクトのどこかで使用されていますが、どのようにスタックトレースに入ったのかわかりません。 –
スタックトレースの次の数百行に "at AddRecipe.newRecipeItem ..."(? " –