【问题标题】:Why am i not getting any error message even though an exception is called? [closed]为什么即使调用了异常,我也没有收到任何错误消息? [关闭]
【发布时间】:2020-10-13 14:51:46
【问题描述】:

我有以下3个班,请看看:

Main.java:

package com.tsc.sendit.worker;

public class Main {

    public static void main(String[] args) {
        new Thread(new Loader()).start();
    }
}

Loader.java

package com.tsc.sendit.worker;

import java.io.File;

public class Loader implements Runnable,Divider.OnExceptionChangeListener {

    private Divider divider;

    public Loader(){
        divider = Divider.getInstance();
        // register listener
        divider.setOnExceptionChangeListener(this);
    }

    @Override
    public void run() {
        // a random fileName (it doesn't exist)
        divider.setFile(new File("f:\\licenses.txt"));
    }

    @Override
    public void onExceptionChanged(String errorMsg) {
        System.out.println(errorMsg);
    }
}

Divider.java

package com.tsc.sendit.worker;

import java.io.File;
import java.io.FileNotFoundException;

public class Divider {

    private static Divider divider;

    private String errorMsg;
    private OnExceptionChangeListener onExceptionChangeListener;

    private Divider() {}

    public static Divider getInstance() {
        if(divider==null)
            divider = new Divider();
        return divider;
    }

    public void setOnExceptionChangeListener(OnExceptionChangeListener onExceptionChangeListener) {
        this.onExceptionChangeListener = onExceptionChangeListener;
        if(errorMsg!=null) {
            notifyListener();
        }
    }

    private void notifyListener() {
        onExceptionChangeListener.onExceptionChanged(errorMsg);
    }

    public void setFile(File file) {
        startDividing();
    }

    private void startDividing() {
        try {
            throw new FileNotFoundException();
        } catch (FileNotFoundException e) {
            errorMsg = "abc";
        }
    }

    interface OnExceptionChangeListener {
        void onExceptionChanged(String errorMsg);
    }
}

我什至调试了这段代码,这使我得出结论,尽管 errorMsg 发生了变化,但自定义侦听器不起作用。 我按照这里提到的方法:how-to-create-custom-listeners-in-java

(尽管那里的代码有效)

请给我一个解决方案。 提前致谢。

【问题讨论】:

  • 只有在调用setOnExceptionChangeListener时才会调用notifyListener,而不是在设置errorMsg时调用

标签: java


【解决方案1】:

“事件侦听器”这个名称并没有什么神奇之处。当你设置 errorMsg 时你需要真正触发它们,没有办法告诉 java:你能不能让它自动工作?

所以,在errorMsg = "abc" 行之后,您可能需要notifyListener();,而您的notifyListener 实现需要一个空保护:

if (onExceptionChangeListener != null) onExceptionChangeListener.onExceptionChanged(errorMsg);

或者更好的是,创建一个方法updateErrorMsg(String msg),它会更新errorMsg并在它不为null时通知监听器。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-02-17
    • 1970-01-01
    • 2012-05-08
    • 1970-01-01
    • 2020-07-12
    • 2016-02-02
    • 2014-04-01
    • 1970-01-01
    相关资源
    最近更新 更多