Skip to content

Commit

Permalink
feat: run external commands async
Browse files Browse the repository at this point in the history
  • Loading branch information
jogerj committed Oct 21, 2023
1 parent 0216ac3 commit d839bd3
Show file tree
Hide file tree
Showing 2 changed files with 47 additions and 41 deletions.
43 changes: 23 additions & 20 deletions src/main/java/com/tonikelope/megabasterd/MainPanel.java
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,7 @@
import java.util.Map;
import java.util.StringTokenizer;
import java.util.UUID;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutorService;
import static java.util.concurrent.Executors.newCachedThreadPool;
import java.util.logging.Level;
Expand Down Expand Up @@ -876,27 +877,29 @@ public static synchronized void run_external_command() {

if (_run_command_path != null && !_run_command_path.equals("")) {
Logger logger = Logger.getLogger(MainPanel.class.getName());
try {
StringTokenizer st = new StringTokenizer(_run_command_path);
String[] cmdarray = new String[st.countTokens()];
for (int i = 0; st.hasMoreTokens(); i++)
cmdarray[i] = st.nextToken();

ProcessBuilder pb = new ProcessBuilder(cmdarray)
.redirectErrorStream(true);
Process pr = pb.start();

BufferedReader in = new BufferedReader(new InputStreamReader(pr.getInputStream()));
String line;
while ((line = in.readLine()) != null) {
logger.log(Level.INFO, "[Command output] " + line);
CompletableFuture.runAsync(() -> {
try {
StringTokenizer st = new StringTokenizer(_run_command_path);
String[] cmdarray = new String[st.countTokens()];
for (int i = 0; st.hasMoreTokens(); i++)
cmdarray[i] = st.nextToken();

ProcessBuilder pb = new ProcessBuilder(cmdarray)
.redirectErrorStream(true);
Process pr = pb.start();

BufferedReader in = new BufferedReader(new InputStreamReader(pr.getInputStream()));
String line;
while ((line = in.readLine()) != null) {
logger.log(Level.INFO, "[Command output] " + line);
}
pr.waitFor();
in.close();
pr.destroy();
} catch (IOException | InterruptedException ex) {
logger.log(Level.SEVERE, ex.getMessage());
}
pr.waitFor();
in.close();
pr.destroy();
} catch (IOException | InterruptedException ex) {
logger.log(Level.SEVERE, ex.getMessage());
}
});

LAST_EXTERNAL_COMMAND_TIMESTAMP = System.currentTimeMillis();
}
Expand Down
45 changes: 24 additions & 21 deletions src/main/java/com/tonikelope/megabasterd/SettingsDialog.java
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,7 @@
import java.util.Map;
import java.util.Set;
import java.util.StringTokenizer;
import java.util.concurrent.CompletableFuture;
import java.util.logging.Level;
import java.util.logging.Logger;
import java.util.stream.Collectors;
Expand Down Expand Up @@ -2912,28 +2913,30 @@ private void run_command_test_buttonActionPerformed(java.awt.event.ActionEvent e
Logger logger = Logger.getLogger(MiscTools.class.getName());

if (run_command_textbox.getText() != null && !"".equals(run_command_textbox.getText().trim())) {
try {
StringTokenizer st = new StringTokenizer(run_command_textbox.getText().trim());
String[] cmdarray = new String[st.countTokens()];
for (int i = 0; st.hasMoreTokens(); i++)
cmdarray[i] = st.nextToken();

ProcessBuilder pb = new ProcessBuilder(cmdarray)
.redirectErrorStream(true);
Process pr = pb.start();

BufferedReader in = new BufferedReader(new InputStreamReader(pr.getInputStream()));
String line;
while ((line = in.readLine()) != null) {
logger.log(Level.INFO, "[Command output] " + line);
CompletableFuture.runAsync(() -> {
try {
StringTokenizer st = new StringTokenizer(run_command_textbox.getText().trim());
String[] cmdarray = new String[st.countTokens()];
for (int i = 0; st.hasMoreTokens(); i++)
cmdarray[i] = st.nextToken();

ProcessBuilder pb = new ProcessBuilder(cmdarray)
.redirectErrorStream(true);
Process pr = pb.start();

BufferedReader in = new BufferedReader(new InputStreamReader(pr.getInputStream()));
String line;
while ((line = in.readLine()) != null) {
logger.log(Level.INFO, "[Command output] " + line);
}
pr.waitFor();
in.close();
pr.destroy();
} catch (IOException | InterruptedException ex) {
logger.log(Level.SEVERE, ex.getMessage());
JOptionPane.showMessageDialog(this, ex.getMessage(), "Error", JOptionPane.ERROR_MESSAGE);
}
pr.waitFor();
in.close();
pr.destroy();
} catch (IOException | InterruptedException ex) {
logger.log(Level.SEVERE, ex.getMessage());
JOptionPane.showMessageDialog(this, ex.getMessage(), "Error", JOptionPane.ERROR_MESSAGE);
}
});
}
}//GEN-LAST:event_run_command_test_buttonActionPerformed

Expand Down

0 comments on commit d839bd3

Please sign in to comment.