Простой JDialog вызывает переполнение стека - PullRequest
3 голосов
/ 25 января 2011

Я пишу визуальное приложение на Netbeans, и натолкнулся на необходимость в диалоговом окне.Я решил скопировать фрагменты кода из AboutBox, которые Netbeans предоставляет автоматически, только чтобы обнаружить, что оба они вызывают ошибки!

Кажется, я не могу найти источник ошибок, хотяоба возникают, когда диалоги закрыты.

Для простоты, поскольку я считаю, что обе ошибки связаны, вот мой 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 по умолчанию (даже если предоставленный NetBeans AboutBox вызывает 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);
}

1 Ответ

0 голосов
/ 19 декабря 2013

Как упоминает Эштон К в комментариях, эту проблему можно решить, перейдя на версию Oracle JDK.Так что эта проблема - проблема с запуском хотя бы его конкретной версии OpenJDK.

...