簡體   English   中英

定時函數拋出空指針異常

[英]Timed functions throw null pointer exception

嗨,我正在創建一個類,在其中可以傳遞函數的功能,以周期性或暫時關閉。 問題是我傳遞給我的函數會立即被調用,此后,當我假設它們被調用時,會出現以下錯誤:

java.lang.NullPointerException
at TimedFunction$2.run(TimedFunction.java:41)
at java.util.TimerThread.mainLoop(Unknown Source)
at java.util.TimerThread.run(Unknown Source)

基類如下(僅相對部分):

import java.util.concurrent.Callable;
...

    public TimedFunction () {}

    public void addSingleEvent (Callable func, int seconds){
        //Convert to seconds from miliseconds
                int time = seconds * 1000;

                //Create a new timer
                new java.util.Timer().schedule( 
                        new java.util.TimerTask() {
                            @Override
                            public void run() {
                                try {
                                    func.call();
                                } catch (Exception e) {
                                    // TODO Auto-generated catch block
                                    e.printStackTrace();
                                }
                            }
                        }, 
                        time 
                );
    }

然后,我做一個測試類,如下所示:

public static void main(String[] args) {
    // TODO Auto-generated method stub
    TimedFunction tm = new TimedFunction();

    tm.addSingleEvent(helloWorld(), 5);
    tm.addRepeatedEvent(dataWorld(), 1);
}

private static Callable helloWorld() {
    System.out.print("Hello world!");
    System.out.print(" ");
    return null;
}

檢查您的helloWorld方法-它返回null!

我認為應該像

private static Callable helloWorld() {
    return new Callable<String>() {
        return "Hello world";
    }
}

如果我不得不猜測,我認為您對如何使用lambas感到困惑。 如果是這種情況,則您的語法錯誤,應該是這樣的:

tm.addSingleEvent(() -> "hello world", 5);
tm.addRepeatedEvent(() -> "data world", 1);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM