java 代码执行cmd 返回值异常 (关于JAVA Project.waitfor()返回值是1)
关于JAVA Project.waitfor()返回值是1
Project.waitfor()返回值是1,找了很久从网上没有发现关于1的说明。
这时对源代码调试了一下,发现Project=null.而去根目录下点击被调用的bat文件发现也可以被正确执行。
这时想到应该将标准错误流的信息打印出来,发现是bat文件的路径只获取到了第一个空格前。所以问题的原因是空格导致文件路径不能被获取。
原先的代码
String batpath = file.getCanonicalPath() + "\resources\runTest.bat"; //run bat file Process project = Runtime.getRuntime().exec("cmd.exe /c " + batpath); int exitcode=project.waitFor(); //kill the process project.destroy(); logger.info(exitcode);
修改后的代码
//run bat file Process project = Runtime.getRuntime().exec("cmd.exe /c " + batpath.replaceAll(" ", "" ""));
此次解决问题的经验是:
不要盲目的先去网上找答案,要先将自己的程序调试一下,将错误信息打印出来,然后针对错误信息有针对性的去网上找答案。这样做比较有效。
自己结论:
java 代码中调用cmd 命令执行 mysql 脚本结果 cmd 命令返回结果为1的问题:
Process process = Runtime.getRuntime().exec(cmd);
int waitFor = process.waitFor();
上边waitFor值为1,而值为0才是执行正常,那我怎么才能知道这个执行结果是因为什么出错的呢?可以把出错信息打印出来就行了,process对象 有一个异常流,打印一下就好了:
FileInputStream errorStream = (FileInputStream)process.getErrorStream();
InputStreamReader isr = new InputStreamReader(errorStream,"gbk");//读取
System.out.println(isr.getEncoding());
BufferedReader bufr = new BufferedReader(isr);//缓冲
String line = null;
while((line =bufr.readLine())!=null) {
System.out.println(line);
}
isr.close();
结果发现打印的语句是:mysqldump 不是内部命令...
可以发现 执行结果不正确是因为 这个mysql的命令 没法使用造成的,去找这个原因就可以了。
这个问题明显是mysql的环境变量中path路径没配mysql路径,但由于mysql软件安装时系统是默认配的,为啥这里还是不能用mysql命令,而c盘根目录却可以用的,最后查原因是需要重启电脑,intellj 中才能使用刚装的mysql服务。
java 代码执行cmd 返回值异常 (关于JAVA Project.waitfor()返回值是1)的更多相关文章
- 关于JAVA Project.waitfor()返回值是1
Project.waitfor()返回值是1,找了很久从网上没有发现关于1的说明. 这时对源代码调试了一下,发现Project=null.而去根目录下点击被调用的bat文件发现也可以被正确执行. 这时 ...
- 【Hadoop离线基础总结】通过Java代码执行Shell命令
通过Java代码执行Shell命令 需求 在实际工作中,总会有些时候需要我们通过java代码通过远程连接去linux服务器上面执行一些shell命令,包括一些集群的状态管理,执行任务,集群的可视化界面 ...
- Java 代码执行流程
Java 代码执行流程 类加载过程 加载 -> 验证 -> 准备 -> 解析 -> 初始化 -> 使用 -> 卸载 类加载时机:代码使用到这个类时 验证阶段 &qu ...
- 第一章 Java代码执行流程
说明:本文主要参考自<分布式Java应用:基础与实践> 1.Java代码执行流程 第一步:*.java-->*.class(编译期) 第二步:从*.class文件将其中的内容加载到内 ...
- 使用java代码执行linux命令
前提: java代码是在windows下面写的,要打包放到linux下面运行,并且执行某个脚本. java代码: try { // 起作用的代码其实就下面这一行, 参数是linux中要执行的代码 Ru ...
- java调用执行cmd指令启动weblogic
这里的例子是启动weblogic import java.io.BufferedReader; import java.io.IOException; import java.io.InputStre ...
- java中执行cmd命令
一.java执行cmd命令的三种方式:http://www.jb51.net/article/80829.htm 参考:https://www.cnblogs.com/zhufu9426/p/7928 ...
- Java代码执行过程概述
Java代码经历三个阶段:源代码阶段(Source) -> 类加载阶段(ClassLoader) -> 运行时阶段(Runtime) 首先我们来理清一下Java代码整个执行过程, 让我们对 ...
- Java代码执行顺序(静态变量,非静态变量,静态代码块,代码块,构造函数)加载顺序
//据说这是一道阿里巴巴面试题,先以这道题为例分析下 public class Text { public static int k = 0; public static Text t1 = new ...
随机推荐
- mac redis搭建集群
1.下载redis客户端 2.修改redis.conf文件 port 6379 //端口 daemonize yes cluster-enabled yes //打开集群 cluster-config ...
- 单例模式和配置admin
单例模式和配置admin 单例模式的概念 单例模式主要目的是确保某一个类只有一个实例存在.比如,某个服务器程序的配置信息存放在一个文件中,客户端通过一个 AppConfig 的类来读取配置文件的信 ...
- dfs 例题皇后问题
题目描述 一个如下的 6 \times 66×6 的跳棋棋盘,有六个棋子被放置在棋盘上,使得每行.每列有且只有一个,每条对角线(包括两条主对角线的所有平行线)上至多有一个棋子. 上面的布局可以用序列 ...
- Cookie SameSite属性介绍及其在ASP.NET项目中的应用
一.Cookie SameSite属性介绍 就像大家已经知道的,一旦设置Cookie之后,在Cookie失效之前浏览器会一直将这个Cookie在后续所有的请求中都传回到Server端.我们的系统会利用 ...
- 使用Jenkins与Docker持续集成与发布NetCore项目(实操篇)
使用Jenkins与Docker持续集成与发布NetCore项目(教程一) 原文地址:https://www.cnblogs.com/Jackyye/p/12588182.html 基本环境 该教程的 ...
- matplotlib命令与格式:参数配置文件与参数配置
转自 https://my.oschina.net/swuly302/blog/94805 自定义matplotlib Created Saturday 08 December 2012 5.1 ma ...
- 十个python图像处理工具
介绍 如今的世界存在了大量的数据,图像数据是重要的组成部分.如果要利用这些图片,需要对图像进行处理,提高图片质量或提取图片内容信息. 图像处理的常见操作包括图像显示,基本操作如裁剪,翻转,旋转等,图像 ...
- php 设置允许跨域请求
php 服务端代码 <?php header('Content-Type: text/html;charset=utf-8'); header('Access-Control-Allow-Ori ...
- socket,实现服务器和客户端对话
服务器: #define _CRT_SECURE_NO_WARNINGS#include<stdio.h>#include<string>#include<WinSock ...
- 感知器基础原理及python实现
简单版本,按照李航的<统计学习方法>的思路编写 数据采用了著名的sklearn自带的iries数据,最优化求解采用了SGD算法. 预处理增加了标准化操作. ''' perceptron c ...