2011-01-25 6 views
3

私は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); 
} 
+6

なぜスタックトレースにXMLがあるのですか?この単純なJDialogを別の小さなプロジェクト(大きなプロジェクトの一部ではない)として実行しようとしましたか? –

+0

別々に運行しようとしましたが、運がありません。 XMLはプロジェクトのどこかで使用されていますが、どのようにスタックトレースに入ったのかわかりません。 –

+0

スタックトレースの次の数百行に "at AddRecipe.newRecipeItem ..."(? " –

答えて

0

アシュトンKがコメントに言及しているように、この問題はOracleバージョンのJDKに移行することで解決できます。だから、この問題は少なくとも彼の特定のバージョンのOpenJDKを実行することで問題になります。

関連する問題