【问题标题】:java - issue with exceptionsjava - 异常问题
【发布时间】:2014-03-09 17:52:08
【问题描述】:

我在编译我的代码时遇到了一些问题。

这是一种使用 Value 类将文本保存到文件的方法

public void saveEventsToFile() throws Exception {
    String tmp = getEventsAsString();
    value = Value.makeString(tmp);
    Value.saveFile(value, "\\events" + "\\" + "YEAR" + "\\" + months[MONTH] + "\\" + DAY);
}

这是另一个对象的构造函数的一部分。我在按钮上有一个动作监听器(确定),当按下该按钮时,我想调用 saveEventsToFile 方法。

OK.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            int h, m;
            h = (Integer) hourSpinner.getValue();
            m = (Integer) minuteSpinner.getValue();
            parentPanel.createNewEvent(parentPanel.selectedBox, parentWindow,       textPane.getText(), h, m);
            parentPanel.selectedBox.saveEventsToFile();
            dispose();
        }
    });

如果我在 actionPerformed 上添加 throws Exception,我的代码将无法编译,如果没有它,我会在 arentPanel.selectedBox.saveEventsToFile(); 上收到“未处理的异常”错误;线

我怎样才能让它编译?我对异常没有太多经验。

【问题讨论】:

  • 在 Eclipse 中将鼠标悬停在错误行上并单击“用 try-catch 环绕”选项

标签: java exception


【解决方案1】:

正如唐福克斯所说:

OK.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            int h, m;
            h = (Integer) hourSpinner.getValue();
            m = (Integer) minuteSpinner.getValue();
            parentPanel.createNewEvent(parentPanel.selectedBox, parentWindow,       textPane.getText(), h, m);
            try {
                parentPanel.selectedBox.saveEventsToFile();
            } catch (ExeptionThaIsThrownBySaveEventsMethod e) {
                // display error
            }
            dispose();
        }
    });

【讨论】:

  • 嗯,成功了。但是还有一个问题,当我没有指定某个路径时,文件直接保存在项目文件夹中。但是当我在项目文件夹中指定一个路径时(例如“\\events”+“\\”+“YEAR”+“\\”+months[MONTH]+“\\”+DAY)我得到一个“文件不是发现异常”。如何指定此路径?
  • 请将答案标记为正确并为此问题打开一个新问题。
  • nvm 我想通了:)
【解决方案2】:

首先,如果您不使用 ActionEvent 的任何特定元素,请将方法的逻辑移动到您拥有的类主体中。

OK.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {

                Integer h = (Integer) hourSpinner.getValue());
                Integer m = (Integer) minuteSpinner.getValue(); 

             saveEventsToFile(h,m)
              dispose();
        }
    });

private void saveEventsToFile(Integer hour, Integer minute) {

   if(hour == null || minute == null) {
     throw new IllegalArgumentException("The parameters must not be null.")
   }

   parentPanel.createNewEvent(parentPanel.selectedBox, parentWindow, textPane.getText(), h,m);

   try {
     parentPanel.selectedBox.saveEventsToFile();
   }catch(ExeptionThaIsThrownBySaveEventsMethod e) {
     throw new IllegalStateException(e);
   }
}

这里要记住的是,您应该避免捕获异常,因为您可能会捕获超出预期的内容。这很重要,因为在某些例外情况下应用程序可以继续进行,其他只需要关闭即可。如果保存情况下出现异常,用户可以做一些事情来重试操作。如果应用程序必须关闭,因为无法再操作您更改使用未经检查的(运行时)异常。

【讨论】:

    猜你喜欢
    • 2011-09-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-05
    • 1970-01-01
    • 2022-12-06
    • 2016-02-16
    相关资源
    最近更新 更多