我们经常使用Runtime.getRuntime().exec(adb shell );在java执行的时候,不像我们cmd执行会有结果显示,我们就不会知道执行结果如何,如push不知道有没有push玩;
首先我们Swing画有textArea文本框(带滚动条的,否则内容太多显示不完,先scrollPane,在选择JTextArea放在上面,具体百度swing方法使用)。
效果图(adb 输入的结果,显示到这个框里),如下:
具体实现(格式很乱,复制到eclipse中排列下):
//把line的内容输入到文本框显示
private void showContent(String msg) {
textArea.setText(msg);
}
//按钮实现:
btnNewButton.addActionListener(new ActionListener() {
private Component p;
public void actionPerformed(ActionEvent e) {
//从这里开始
Process process1 = null;
StringBuilder result = new StringBuilder();
BufferedReader bufrIn = null;
BufferedReader bufrError = null;
String line = null;
try {
System.out.println("path1a: "+path1);//path是选择脚本路径
if(path1.equals("")){//这个判断路径不能为空,这能equals写法,其他写法不行,如:path1==null 或 path1==“”,这样不对的。
System.out.println("path: "+path);
// process1.waitFor();// 方法阻塞, 等待命令执行完成(成功会返回0)
process1 =Runtime.getRuntime().exec("adb pull sdcard/pictures/screenshots "+path);
// 获取命令执行结果, 有两个结果: 正常的输出 和 错误的输出(PS: 子进程的输出就是主进程的输入)
bufrIn = new BufferedReader(new InputStreamReader(process1.getInputStream(), "UTF-8"));
bufrError = new BufferedReader(new InputStreamReader(process1.getErrorStream(), "UTF-8"));
// 读取输出
while ((line = bufrIn.readLine()) != null) {
result.append(line).append('\n');
System.out.println("line1: "+line);//输出内容
}
StringBuffer outputBuf = new StringBuffer();//固定写法
//好像输出的内容是下面这块line
while ((line = bufrError.readLine()) != null) {
result.append(line).append('\n');//内容打印到控制台换行
System.out.println("line2: "+line);//内容打印到控制台
String bc = line; //bc接收line的内容
outputBuf.append(line);//输出内容
outputBuf.append("\n");//换行
}
//显示该方法,同textArea.setText(msg)
showContent(outputBuf.toString());
} catch (Throwable t) {
t.printStackTrace();
}
}
});