簡體   English   中英

從 run() 方法調用另一個 class 的方法

[英]Calling method of Another class from run() method

我創建了一個調用 run 方法的調度程序。

@WebListener
public class BaclkgroundJobManager implements ServletContextListener {

    private ScheduledExecutorService scheduler;
    public void contextInitialized(ServletContextEvent sce)  { 

        scheduler=Executors.newSingleThreadScheduledExecutor();
        scheduler.scheduleAtFixedRate(new SomeMinuteJob(), 0, 5, TimeUnit.MINUTES);      
     }
}

這要求

public class SomeMinuteJob implements Runnable {

    @Override
    public void run() {
        
        System.out.print("Inside run method");
            ReadData obj= new ReadData();
            obj.readData();
            System.out.println("After reading data");
            }       

}

我在下面創建了ReadData class。

public class ReadData
{
   public void readData()
   {
     System.out.println("I am inside readdata");
   }
}

因此,我在 run() 方法中創建了ReadData的 object,並調用了它的方法。 但是 ReadData class 沒有得到控制。 它沒有打印 readData() 方法中的內容。 即使我創建了構造函數並放置了一些內容,但即使那不是打印。 我該如何解決? 控制進入內部運行,它正在打印Inside run method

ScheduledExecutorService的一個常見問題是,如果調度的命令拋出異常,異常就會被默默吞下。 問題中的代碼似乎沒有拋出異常,但在更復雜的代碼中很難避免(例如意外的 NullPointerExceptions)

一個快速解決方法是將所有 Runnable.run 方法放在 try-catch 塊中:

public class SomeMinuteJob implements Runnable {
    @Override
    public void run() {
        try {
            System.out.print("Inside run method");
            ReadData obj = new ReadData();
            obj.readData();
            System.out.println("After reading data");
        } catch (Exception e) {
            // Log exception
            e.printStackTrace();
        }
    }
}

暫無
暫無

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

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