gpt4 book ai didi

java - 一个接一个地执行方法,一次一个

转载 作者:行者123 更新时间:2023-11-30 08:35:28 24 4
gpt4 key购买 nike

我想在一个按钮内执行许多方法,但有些方法花费的时间更少,有些方法的处理时间更长,我希望它们以特定的顺序运行,因为一种方法适用于另一种方法输出。我的按钮执行如下:-

{
Basic b = new Basic();
b.method1(); //Normal processing
b.method2(); //Normal processing
b.method3(); //Heavy processing takes a lot of time like 5 to 10sec
b.method4(); //Basic processing
b.method5(); //Medium Processing FileHandling(works on 5 file)
}

所以发生的事情是一切都很完美,除了执行方法 2 之外,但是随着方法 3 的出现,它变得一团糟。所以我发生的事情是我的方法 3 被跳过,方法 4 和方法 5 被执行结束了给我一个空指针异常,因为它们取决于从方法 3 的执行中接收到的数据。

有人能告诉我如何确保我的方法 4 和 5 仅在我的方法 3 完成后运行,仅供引用,我的方法 3 包含来自不同类的 2 个方法,一个创建一些脚本,另一个执行它,它采用真实的自从它使用 bash shell 以来的时间。

P.S.-当我的按钮执行完成时,我看到我的 method3 没有做任何事情,比如它被跳过了之类的。

代码:-

public void method3(String abstarpath,String filename,String parapth)
{
try{
String cmd1 = "tar xzf "+abstarpath;
String cmd2 = "mv "+ parapth+"/"+filename +" /home/apoorv/Desktop/";
txtarea.append("#"+cmd1+"\n");
txtarea.append("#"+cmd2+"\n");
executeCommands(cmd1, cmd2);
}catch(Exception e){
txtarea.append("#"+e+"\n");
e.printStackTrace();
}
txtarea.append("\n");
}

public void executeCommands(String cmd1,String cmd2) throws IOException {

File tempScript = createTempScript(cmd1,cmd2);

try {
ProcessBuilder pb = new ProcessBuilder("bash", tempScript.toString());
pb.inheritIO();
Process process = pb.start();
process.waitFor();
} catch (InterruptedException e) {
txtarea.append("#"+e+"\n");
e.printStackTrace();
} finally {
tempScript.delete();
}
}

public File createTempScript(String cmd1,String cmd2) throws IOException {
File tempScript = File.createTempFile("script", null);

Writer streamWriter = new OutputStreamWriter(new FileOutputStream(
tempScript));
PrintWriter printWriter = new PrintWriter(streamWriter);

printWriter.println("#!/bin/bash");
printWriter.println(cmd1);
printWriter.println(cmd2);
printWriter.close();

return tempScript;
}

最佳答案

查看您的代码,您遇到的问题似乎与并发没有任何关系。问题是您的 main 方法不知道 methodX() 方法是否成功完成。

您可以做的是将异常处理移至您的主要方法:

try {
Basic b = new Basic();
b.method1(); //Normal processing
b.method2(); //Normal processing
b.method3(); //Heavy processing takes a lot of time like 5 to 10sec
b.method4(); //Basic processing
b.method5(); //Medium Processing FileHandling(works on 5 file)
}
catch (Exception e) {
// error handling
}

(当然,您必须从其他方法中删除异常处理)。

然后,只要其中一个方法抛出异常,就会跳过其余方法并执行异常处理程序。

关于java - 一个接一个地执行方法,一次一个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38178677/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com