无法处理自定义异常Java

时间:2013-06-03 10:20:40

标签: java android exception exception-handling

我知道此类问题已经出现过,我已经把它们扔掉了,但没有得到我需要做的最后一部分。

My ExceptionClass

public class ProException extends Exception {
/**
 * 
 */
private static final long serialVersionUID = 1L;

public ProException(String message) {
    super(message);
  }
}

我的ActivityClass(适用于ListView的Android自定义适配器)

public View getView(int position, View convertView, ViewGroup parent) {
    View vi = convertView;
    try {
        if (convertView == null) {
            vi = inflater.inflate(R.layout.pause_client_trigger_request_select_sku_list_row, null);
            tvItemName = (TextView) vi.findViewById(R.id.list_row_ItemName);                
        } else {
            tvItemName = (TextView) vi.findViewById(R.id.list_row_ItemName);
        }

        hmap = new HashMap<String, String>();
        hmap = data.get(position);
        tvItemName.setText(hmap.get(KEY_ItemName));

    } catch (ProException ex) {
        Log.i(Tag, ex.getMessage());
    }

    return vi;
}

现在我想要的是。

如果在此try catch任何异常中发生异常。 它应该由我的custom class (ProException)捕获。但它不允许。 任何帮助

Java Eclipse编辑器中的消息 Unreachable catch block for ProException. This exception is never thrown from the try statement body

4 个答案:

答案 0 :(得分:1)

所有这些视图都不了解您的自定义异常类。您必须扩展/编写自己的View类,这些类会抛出您的自定义异常,或者在try块中手动抛出异常。

throw new ProException();

答案 1 :(得分:0)

MD请告诉getView方法中的哪个调用可以抛出ProException。似乎该方法中的代码都没有抛出ProException,因此你得到了#34;这个异常永远不会从try语句体中抛出&#34;并阻止无法访问。为了在try catch中使用它应该获得Proexception,或者你可以在tryView的try catch中捕获Exception,然后将它包装在ProException中。

请查看这是否解决了这个问题。

答案 2 :(得分:0)

ProException是自定义异常。当代码块抛出异常时,它无法捕获,因为当您编写任何自定义异常时,层次结构变为

Exception->>ProException 

如果代码块抛出任何异常,它将尝试找出Exception而不是ProException的catch块。或者用简单的术语It will try to find out type of exception

所以你必须抓住Exception而不是ProException

每当你扔到某处时,自定义异常都会有所帮助。

答案 3 :(得分:0)

我认为你想要的是

public View getView(int position, View convertView, ViewGroup parent) {
    View vi = convertView;
    try {
        if (convertView == null) {
            vi = inflater.inflate(R.layout.pause_client_trigger_request_select_sku_list_row, null);
            tvItemName = (TextView) vi.findViewById(R.id.list_row_ItemName);                
        } else {
            tvItemName = (TextView) vi.findViewById(R.id.list_row_ItemName);
        }

        hmap = new HashMap<String, String>();
        hmap = data.get(position);
        tvItemName.setText(hmap.get(KEY_ItemName));

    } catch (Exception ex) {
        Log.i(Tag, ex.getMessage());
        throw new ProException(ex.getMessage());
    }

    return vi;
}

然后调用代码可以捕获ProException。您应该考虑将导致异常作为ProException的构造函数参数(然后您可以将其传递给super(cause,message))。