我正在开发一个任务管理日历应用程序,它将数据存储在数据库中,我遇到了这个问题。我有一个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块中,现在我得到错误说
构造函数调用必须是构造函数
中的第一个语句
这些问题如何解决?我的软件设计/结构是错误的吗?帮助
答案 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);
}
}
}