1

プログラムを実行しようとすると、このエラーが継続的に発生します。

Exception in thread "main" java.lang.StackOverflowError

at sun.reflect.GeneratedMethodAccessor1.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at sun.reflect.misc.MethodUtil.invoke(MethodUtil.java:244)
at javax.swing.UIDefaults.getUI(UIDefaults.java:752)
at javax.swing.UIManager.getUI(UIManager.java:1001)
at javax.swing.JPanel.updateUI(JPanel.java:109)
at javax.swing.JPanel.<init>(JPanel.java:69)
at javax.swing.JPanel.<init>(JPanel.java:92)
at javax.swing.JPanel.<init>(JPanel.java:100)
at serverProperties.<init>(serverProperties.java:164)
at exportProperties.<init>(exportProperties.java:8)
at serverProperties.<init>(serverProperties.java:162)

特定のクラスからメソッドにアクセスしようとした後にのみ発生します。

これはメインクラスです:

public class serverProperties extends JPanel
{
    //Add classes
    exportProperties writeProperties = new exportProperties();

    //Assume I created the array sent to the exportProperties class

    public serverProperties()
    {
        CheckBoxListener checkListener = new CheckBoxListener();

        //Assume I created the check box and added the listener for it
    }


    private class CheckBoxListener implements ItemListener
    {

        public void itemStateChanged (ItemEvent event)
        {
            JCheckBox checkBox;
            checkBox= (JCheckBox)event.getSource();

            //Process check Boxes
            if (checkBox.isSelected())
            {
                checkBox.setText("Yes");
                writeProperties.exportFile(propertiesArr);
            }
        }
    }
}

これは、上記のコードによってアクセスされるクラスのコードです。

public class exportProperties extends serverProperties
{


    public void exportProperties(String[] args)
    {
        exportFile(args);
    }

    public static void exportFile(String[] propertiesArr)
    {
        try
        {
            FileWriter outFile = new FileWriter("Path/file.txt");
            BufferedWriter out = new BufferedWriter(outFile);

            //Loop through properties
            for (int i=0; i < 27; i++)
            {
                out.append(propertiesArr[i]);
            }
            //out.write("Test");
            out.close();

        }
        catch (IOException exception)
        {
            exception.printStackTrace();
        }
    }

    public void importFile()
    {

    }


}

exportProperties クラスへの呼び出しを削除すると、プログラムは完全に機能します。エラーメッセージで、最後の2行

at exportProperties.<init>(exportProperties.java:8)
at serverProperties.<init>(serverProperties.java:162)

それがちょうど終わる前に、彼らは何度も繰り返します。

私はグーグルで検索しましたが、何が起こっているのかわかりません..助けてくれてありがとう!

4

1 に答える 1

8

あなたのserverPropertiesクラスにはこれがあります:

exportProperties writeProperties = new exportProperties();

... のインスタンスを作成しますexportProperties。しかし、exportPropertiesextendsserverPropertiesを構築するexportPropertiesと、上記の行が再度実行されます ... というわけで、続行します。

何を達成しようとしているのかを知らなければ、「そうしないでください」以外の具体的な支援を提供することは困難です。ここで継承を使用するべきではないと思います。(どちらかを拡張している理由は明らかではありませんJPanel...継承よりも構成を優先してください。)

(Java の規則に従うようにクラス名も修正する必要があります...)

于 2013-01-27T09:09:39.067 に答える