重载构造函数和异常的Java问题

时间:2015-12-09 02:28:42

标签: java database swing exception constructor

我正在开发一个任务管理日历应用程序,它将数据存储在数据库中,我遇到了这个问题。我有一个main_app类,可以创建主要的swing应用程序。它还创建了一个calendarDAO(数据访问对象)对象,用于管理mySql查询,更新等。

现在,如果calendarDAO出现问题,我想显示错误对话框消息。因此,当我创建DAO对象时,我必须给它一个主应用程序的引用。但我想保持DAO类的通用性,并且能够在不引用JFrame子类的情况下使用它。所以,我创建了重载的构造函数,一个将JFrames子类作为参数,另一个不作为(主要的)。现在当我调用带有Jframe对象的构造函数时,我也想调用主构造函数,所以我这样定义它:

private MainApp mApp;

public calendarDAO(MainApp mAppRef){
    try{ 
        this(); 
    } catch (Exception e){e.printStackTrace();}

     mApp = mAppRef;    
    }

问题是这不起作用,因为我的主构造函数抛出异常所以我必须把它放在try块中,现在我得到错误说

  

构造函数调用必须是构造函数

中的第一个语句

这些问题如何解决?我的软件设计/结构是错误的吗?帮助

2 个答案:

答案 0 :(得分:3)

您应该抛出将从两个构造函数抛出的异常

private MainApp mApp;

public calendarDAO(MainApp mAppRef) throws SomeExplicitException{
     this(); 
     mApp = mAppRef;    
}

如果您能够处理异常,那么您应该执行MadProgrammer建议并创建工厂方法来创建对象

答案 1 :(得分:1)

使用简单的观察者模式:

public class SimpleWorker {

    static public interface SimpleWorkerListenerIf {
        void exception(Exception pExcewption);
        // ... and more methods
    }



    private final SimpleWorkerListenerIf    mListener;

    public SimpleWorker(final SimpleWorkerListenerIf pListener) {
        mListener = pListener;
        if (pListener == null) throw new IllegalArgumentException("pListener must not be null!");

        try {
            // ... some crazy stuff in here
        } catch (final RuntimeException e) {
            mListener.exception(e);
        }
    }
}