调用使用批处理文件调度的java类文件,但似乎什么都没有发生
使用批处理文件调用java类文件可以很好地工作 下面是正在工作的代码调用使用批处理文件调度的java类文件,但似乎什么都没有发生,java,Java,使用批处理文件调用java类文件可以很好地工作 下面是正在工作的代码 public class TestA { public static void main(String[] args) { new TestA().printA(); } public void printA(){ System.out.println("This is A..."); try { File file = new File("D:/FileA.txt");
public class TestA {
public static void main(String[] args) {
new TestA().printA();
}
public void printA(){
System.out.println("This is A...");
try {
File file = new File("D:/FileA.txt");
boolean fvar = file.createNewFile();
if (fvar){
System.out.println("File has been created successfully");
}
else{
System.out.println("File already present at the specified location");
}
} catch (IOException e) {
System.out.println("Exception Occurred:");
e.printStackTrace();
}
}
}
上面的代码与此相同,如果我使用任务执行器将其设置为调度,并尝试使用批处理文件调用同一个文件,那么它将不起作用(我的意思是,这里没有创建文件)。我需要你的帮助
带调度的代码:
public class TestD implements Runnable {
private ScheduledExecutorService executor = null;
@Override
public void run() {
try {
File file = new File("D:/FileD.txt");
boolean fvar = file.createNewFile();
if (fvar){
System.out.println("File has been created successfully");
}
else{
System.out.println("File already present at the specified location");
}
} catch (IOException e) {
System.out.println("Exception Occurred:");
e.printStackTrace();
}
}
public void executeScheduler() throws SQLException {
executor.scheduleAtFixedRate(this, 2, 5, TimeUnit.SECONDS);
}
public static void main(String args[]){
TestD testD = new TestD();
try {
testD.executeScheduler();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
我编写代码是为了创建一个文件,只是为了测试我的代码是否从批处理文件调用,因为我无法立即观察cmd提示符中显示的system out语句
编辑:出现此问题的原因是由于
NullPointerException
,但异常无法捕获,因为我正在使用批处理调用文件,cmd窗口未显示错误,或者它可能显示了错误,但不可人为捕获,并且窗口在几秒钟内关闭。因此,我不认为这个问题与问题是由于变量未初始化并抛出了一个在我的例子中无法捕获的NullPointerException。添加了一个构造函数代码来初始化对象,它开始正常工作
正在运行的已修改代码
public class TestD implements Runnable {
private ScheduledExecutorService executor = null;
public TestC(){
executor = Executors.newScheduledThreadPool(1);
}
@Override
public void run() {
try {
File file = new File("D:/FileD.txt");
boolean fvar = file.createNewFile();
if (fvar){
System.out.println("File has been created successfully");
}
else{
System.out.println("File already present at the specified location");
}
} catch (IOException e) {
System.out.println("Exception Occurred:");
e.printStackTrace();
}
}
public void executeScheduler() throws SQLException {
executor.scheduleAtFixedRate(this, 2, 5, TimeUnit.SECONDS);
}
public static void main(String args[]){
TestD testD = new TestD();
try {
testD.executeScheduler();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
在executor.scheduleAtFixedRate(这个,2,5,TimeUnit.SECONDS)行,您可能会得到一个NullPointerException
因为您从未初始化过executor
。感谢luk2302&devpuh,这是因为没有发生初始化,我无法找到它,因为我无法从cmd窗口捕获日志。添加了executor=Executors.newScheduledThreadPool(1)代码>在构造函数中,它开始工作。我可以知道为什么1否决了这个问题吗?我已经提供了寻求帮助的所有必要细节。答案可能是愚蠢或艰难的,但希望这不是否决投票的原因。你没有提供异常+stacktrace,你只是说“不工作”。@luk2302如果我能够跟踪stacktrace,我可能会通过查看异常来解决问题。我还提到,我已经编写了一个代码来创建一个文件,以检查我的代码是否被调用。希望我自己清楚。