从 运行() 方法调用另一个 class 的方法
Calling method of Another class from run() method
我创建了一个调用 运行 方法的调度程序。
@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");
}
}
所以我在 运行() 方法中创建了 ReadData
的对象并调用了它的方法。但是 ReadData class 并没有得到控制。它不打印 readData() 方法中的内容。即使我创建了构造函数并放置了一些内容,但即使那不是打印。我该如何解决?
控件进入 运行 并打印 Inside run method
ScheduledExecutorService
的一个常见问题是,如果计划的命令抛出异常,异常会被静静地吞掉。题目中的代码好像没有抛出异常,但是在更复杂的代码中很难避免(例如unexpected 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();
}
}
}
我创建了一个调用 运行 方法的调度程序。
@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");
}
}
所以我在 运行() 方法中创建了 ReadData
的对象并调用了它的方法。但是 ReadData class 并没有得到控制。它不打印 readData() 方法中的内容。即使我创建了构造函数并放置了一些内容,但即使那不是打印。我该如何解决?
控件进入 运行 并打印 Inside run method
ScheduledExecutorService
的一个常见问题是,如果计划的命令抛出异常,异常会被静静地吞掉。题目中的代码好像没有抛出异常,但是在更复杂的代码中很难避免(例如unexpected 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();
}
}
}