From 4fa7dc2560005756289a98c6319b1e96379813cc Mon Sep 17 00:00:00 2001 From: garenchan <1412950785@qq.com> Date: Fri, 7 Dec 2018 18:41:46 +0800 Subject: [PATCH] More user-friendly prompts when selecting pid. When users accidentally enter a non-integer, prompt instead of printing stack trace. --- boot/src/main/java/com/taobao/arthas/boot/Bootstrap.java | 8 +++++++- .../main/java/com/taobao/arthas/boot/ProcessUtils.java | 4 +++- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/boot/src/main/java/com/taobao/arthas/boot/Bootstrap.java b/boot/src/main/java/com/taobao/arthas/boot/Bootstrap.java index 8eb19defb..e727573fb 100644 --- a/boot/src/main/java/com/taobao/arthas/boot/Bootstrap.java +++ b/boot/src/main/java/com/taobao/arthas/boot/Bootstrap.java @@ -12,6 +12,7 @@ import java.util.Arrays; import java.util.Collections; import java.util.List; import java.util.logging.Level; +import java.util.InputMismatchException; import javax.xml.parsers.ParserConfigurationException; @@ -249,7 +250,12 @@ public class Bootstrap { int pid = bootStrap.getPid(); // select pid if (pid < 0) { - pid = ProcessUtils.select(bootStrap.isVerbose()); + try { + pid = ProcessUtils.select(bootStrap.isVerbose()); + } catch (InputMismatchException e) { + System.out.println("Please input an integer to select pid."); + System.exit(1); + } if (pid < 0) { System.out.println("Please select an avaliable pid."); System.exit(1); diff --git a/boot/src/main/java/com/taobao/arthas/boot/ProcessUtils.java b/boot/src/main/java/com/taobao/arthas/boot/ProcessUtils.java index 698f99ad9..f4cd527cc 100644 --- a/boot/src/main/java/com/taobao/arthas/boot/ProcessUtils.java +++ b/boot/src/main/java/com/taobao/arthas/boot/ProcessUtils.java @@ -12,6 +12,7 @@ import java.util.LinkedHashMap; import java.util.List; import java.util.Map; import java.util.Scanner; +import java.util.InputMismatchException; import com.taobao.arthas.common.AnsiLog; import com.taobao.arthas.common.ExecutingCommand; @@ -44,7 +45,8 @@ public class ProcessUtils { return PID; } - public static int select(boolean v) { + @SuppressWarnings("resource") + public static int select(boolean v) throws InputMismatchException { Map processMap = listProcessByJps(v); if (processMap.isEmpty()) {