Java 捕获异常并终止程序

Java 捕获异常并终止程序,java,Java,我有一个事件,如果“windowok”==false,它会抛出一个异常。以下是我创建活动的方式: public class GreenhouseControls extends Controller { public class WindowMalfunction extends Event { private Boolean windowok = false; private void set(Boolean windowok) {

我有一个事件,如果“windowok”==false,它会抛出一个异常。以下是我创建活动的方式:

public class GreenhouseControls extends Controller {

    public class WindowMalfunction extends Event {

        private Boolean windowok = false;

        private void set(Boolean windowok) {
          this.windowok = windowok ;
        }

        public WindowMalfunction(long delayTime) {
              super(delayTime);
        }

        public void action() throws ControllerException {   
          if (!windowok) {
              throw new ControllerException("Window Malfunction", 1);
          }
        } 

        public String toString() {
          return "Windok OK = " + windowok;  
        }
   }
}
在另一个名为Controller的类中捕获异常,如下所示:

public class Controller {

    private List<Event> eventList = new ArrayList<Event>();
    private Long wait;

    public void addEvent(Event c) { 
        eventList.add(c); 
    }

    public void shutdown(Long wait) { 
        this.wait = wait;
    }

    public void run() {
       while(eventList.size() > 0)

       for(Event e : new ArrayList<Event>(eventList))
          if(e.ready()) {
              System.out.println(e);
          try {
              e.action();
          }
          catch(ControllerException ex) {
              shutdown();  // WHAT DO I DO HERE?
          }
          eventList.remove(e);
        }

}
公共类控制器{
private List eventList=new ArrayList();
私人长时间等待;
公共无效事件(事件c){
事件列表。添加(c);
}
公共无效关闭(长等待){
this.wait=等待;
}
公开募捐{
while(eventList.size()>0)
对于(事件e:新阵列列表(事件列表))
如果(如ready()){
系统输出打印ln(e);
试一试{
e、 动作();
}
捕获(控制器异常){
shutdown();//我在这里做什么?
}
事件列表。删除(e);
}
}

我需要在Controller类中启动shutdown()方法来终止程序,但随后我需要重写GreenhouseControls类中的shutdown()方法来实现这一点。我应该在GreenhouseControls类中的何处重写此方法?我应该实际调用shutdown()吗方法,或者只是启动一个进程来调用GreenhouseControls类中被重写的方法?

我只需在
Controller
类中声明一个抽象方法
shutdown
,它将由
GreenhouseControls
实现


我不知道您的体系结构的细节,但是,最好有一个抽象类
控制器
(不能实例化)如果不止一个类扩展了它。我认为每种类型的控制器的关闭过程都是不同的,那么,通过将其抽象化,您可以强制扩展
控制器的人实现自定义关闭过程。相反,如果关闭过程总是相同的,您可以直接在
控制器中实现它ode>。最后,如果所有类型的控制器都有一些基本过程,则可以在
shutdown()
内部
controller
类中实现它们,并通过调用
super.shutdown()重写派生类中的方法
作为第一步。

作为旁注,您不应该毫无目的地使用Primative的盒装版本(Long、Boolean等)。您的变量名表明您的对话框按钮文本可能是错误的。请将动词用作按钮,永远不要使用“确定”、“是”或“否”。为了解决主要问题,您为什么需要重写shutdown方法。不清楚1)您正在尝试做什么,2)您为什么认为必须按照您声明的方式来做这是Java类的赋值,这是一个要求。我应该注意,这是一个大项目中非常小的一部分。