程序停留在java中创建类对象

时间:2014-01-23 08:50:28

标签: java eclipse

我有一个父类“应用程序窗口”和一个子类“config”。当我创建“config”对象时,类执行往往会进入循环并继续创建此对象。

以下是代码截图:

public class ApplicationWindow implements ActionListener{
    public String workSpace;
    public String logFile;
    public JFrame frmGenericAutomationFramework;
    public JProgressBar progressBar;
    public File currentTestSuiteFolder;
    public String currentTestSuiteName;

    config cfg;
    SettingsFrame settingsFrame;
    TestSuiteFrame testSuiteFrame;
    PromptTestSuiteName testSuitePrompt;

    public ApplicationWindow (){
        initialize();

        //**cfg  = new config();**
        cfg.readProperties();
    }
}

下面的子类“config”:

public class config extends ApplicationWindow{
    String str;
    File cfgfile;
    FileOutputStream out;
    FileInputStream in;
    Properties props;

    String filepath = "D:/Webdriverwork/GAF/res/elements.properties";

    public config (){
        try{
            cfgfile = new File(filepath);
            in = new FileInputStream(cfgfile);
            props = new Properties();       
        }

        catch (Exception e){
            // Log message in log file
            String message = e.getMessage();

            System.out.println(message);

            // Exit the system
            System.exit(0);
        }
    }

    public void readProperties (){
        try{
            props.load(in);

            workSpace = props.getProperty("WORKSPACE");
            logFile = props.getProperty("LOGFILE");
        }
        catch (Exception e){
            // Log message in log file
            String message = e.getMessage();

            System.out.println(message);

            // Exit the system
            System.exit(0);
        }
    }

    public void updateProperty (String key, String value){
        try{
            props.setProperty(key,value);
        }
        catch (Exception e){
            // Log message in log file
            String message = e.getMessage();

            System.out.println(message);

            // Exit the system
            System.exit(0);
        }       
    }

    public void writeProperties (){
        try{
            in.close();
            out = new FileOutputStream(cfgfile);
            props.store(out, null);
            out.close();
        }
        catch (Exception e){
            // Log message in log file
            String message = e.getMessage();

            System.out.println(message);

            // Exit the system
            System.exit(0);
        }
    }
}

6 个答案:

答案 0 :(得分:0)

这是问题所在:

public class config extends ApplicationWindow

ApplicationWindow构造函数中的

结合使用:

cfg  = new config();

因此,要创建新的ApplicationWindow,您需要创建一个新的config ...但这本身就是ApplicationWindow,因此它会创建另一个 config ...反过来会创建另一个 config等。

为什么config会延长ApplicationWindow?这听起来像是一个奇怪的设计 - 配置不是一个窗口。只需摆脱extends规范,你就会发现其他一切都有效。

此外,我强烈建议您遵循Java命名约定(例如,使用PascalCase作为类名)并将所有字段设为私有。

答案 1 :(得分:0)

Config对象以循环方式创建。当你创建Config对象时,隐式没有ApplicationWindow类的参数构造函数执行,并且再次创建config对象的对象并重复它。enter image description here

记住一件事,
即使你没有调用它,也总会调用超类的隐式无参数构造函数。

public Config()
{
    super();   // compiler adds this statement inside constructor even if you don't declare
}

并且您的超类ApplicationWindow正在创建另一个Config对象。

要避免这种情况,请从new Config()类构造函数中删除ApplicationWindow对象创建行,这将停止循环。并且您已经创建了Config对象的引用。

答案 2 :(得分:0)

您已在Parent类的构造函数中创建了Child类对象。当您创建Object of Child Class时,它的构造函数被调用,它首先调用Parent Class Constructor然后执行Child Class Constructor,再次创建子类对象并且它会一次又一次地重复。所以它在这里导致递归操作,因此无限循环。

答案 3 :(得分:0)

config不能扩展ApplicationWindow,因为您有以下情况: AppWindow从config调用构造函数,config构造函数调用其超级构造函数,即AppWindow - >无端

答案 4 :(得分:0)

为什么configApplicationWindow延伸?您应该删除此继承关系。

您的代码将导致堆栈溢出错误,因为子类的构造函数将在初始化时首先调用其父构造函数。问题是你的ApplicationWindow,作为config的父类,调用其子类的构造函数,这是意外的,并将导致无限循环。

答案 5 :(得分:0)

如果您打算从ApplicationWindow调用readProperties(),那么将其设为抽象方法并删除cfg引用。