1

奇妙な問題に遭遇しました。GUIのボタンを押した結果、テキストをファイルにエクスポートする必要があります。ただし、イベントによって呼び出されるAbstractActionのactionPerformedメソッドにIOExceptionを適用することはできません。私はこれを回避する方法について途方に暮れています。

エクスポートクラスは次のとおりです。

import java.awt.event.*;
import java.lang.*;
import java.util.*;
import java.io.*;

public class ExportRunner
{
  public static void exportToFile(ArrayList<Locker> list) throws IOException
  {

  }
}

そして、AbstractAction拡張機能:

class Export extends AbstractAction
{
  public Export()
  {
    super("Export");
  }
  public void actionPerformed(ActionEvent e)
  {
    ExportRunner.exportToFile(list);
  }
}
4

2 に答える 2

3

まず第一に、例外を再スローしてもよろしいですか、それとも例外を処理したり、ユーザーにメッセージを表示したりする方がよいでしょうか?

オプション 1: 例外を再スローします (私の意見では醜いです):

public void actionPerformed(ActionEvent e) {
   try{
      ExportRunner.exportToFile(list);
   } catch(IOException ioex) {
      throw new RuntimeException(ioex);
    }
  }

オプション 2: キャッチして処理する:

public void actionPerformed(ActionEvent e) {
   try{
      ExportRunner.exportToFile(list);
   } catch(IOException ioex) {
      handleItOrShowMessageToUser(ioex);
    }
 }
于 2012-11-12T23:22:07.363 に答える
1

私は通常、「エラーハンドラー」をアクションクラスに渡します。これにより、アプリケーションの別の部分へのエラーの表示/報告を処理する責任を委任できます...

何かのようなもの...

public interface ErrorListener {
    public void errorOccurred(String msg, Exception exp);
}

次に、それをアクションに渡すことができます...

public class Export extends AbstractAction
{
    private ErrorListener errorHandler;
    public Export(ErrorListener errorHandler)
    {
        super("Export");
        this.errorHandler = errorHandler;
    }
    public void actionPerformed(ActionEvent e)
    {
        try {
            ExportRunner.exportToFile(list);
        } catch (IOException exp) {
            errorHandler.errorOccurred("Failed to export file", exp);
        }
    }
}    

明らかに、どこかで、コールバックを処理するための実装が必要です;)

詳細については、例外トレイルをご覧ください。

于 2012-11-12T23:30:32.477 に答える