Я хочу выполнить несколько методов внутри кнопки, но некоторые из них занимают меньше времени, а некоторые занимают больше времени для обработки, и я хочу, чтобы они запускали их в определенной последовательности как один метод работает на других методах output.My выполнения кнопки выглядит следующим образом: -Выполнение методов один за другим и один за раз
{
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)
}
так что же происходит, что все идет идеально, и как освобожденный вверх до исполнения method2 но приходит method3 он получает все перепутались. Итак, я делаю то, что происходит, когда мой метод3 пропускается, а метод method4 и метод5 запускаются, что дает мне исключение нулевого указателя, поскольку они зависят от данных, полученных от выполнения метода3.
Может ли кто-нибудь сказать мне, как я могу убедиться, что мои методы 4 и 5 запускаются только после того, как мой метод3 завершен, а FYI мой метод3 содержит 2 метода из другого класса, который создает некоторые скрипты, а другой - тот, который выполняет в реальном времени, так как он использует оболочку bash.
P.S.-как закончилась моя кнопка.
Код: -
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;
}
Если наблюдение правильно, то должен быть какой-то параллелизм происходит внутри кода method3. Проверьте создание темы или что-то в этом направлении. Затем проверьте, можете ли вы дождаться окончания. – Fildor
, если 'method3' не является асинхронным, он должен работать так, как вы хотите, -' method4' должен начинаться после завершения 'method3'. похоже, может быть проблема в 'method3', можете ли вы разместить ее содержимое? – user5226582
Так почему же этот метод не выполняется последовательно? –