Execjava
Ⅰ java 中用exec()执行命令行的问题
这是由于JVM没找到IOtest
你可以将这个类生成到运行exec("javac H:\\IOtest.java");这句话的类同一目录下,或者右键“我的电脑”-“属性”-“高级”-“环境变量”新建或编辑已有的CLASSPATH,添加如下内容“H:\”
Ⅱ java如何运行main方法不build
从命令行运行。
1、运行前先编译代码,exec:java不会自动编译代码,你需要手动执行mvn compile来完成编译。
2、编译完成后,执行exec运行main方法。 (不需要传递参数,需要传递参数)
在使用exec命令时,可能会出现一个保护进程DaemonThred警告warning,可能会导致发送的邮件内容和主题乱码。
main方法的声明为:public static void main(String args[])。必须这么定义,这是Java的规范。
Ⅲ java通过exec条用cmd执行adb无效
"cmd.exe /c adb devices"
java的Runtime环境已经是命令行模式,类似已经打开cmd.exe 所以,
执行后续命令无需加上 cmd.exe,命令修改为:
Runtime.getRuntime().exec("adb devices")
Ⅳ java使用exec方法,参数中有管道命令无效,除了拆开成两个,请问还有其他办法吗谢谢
好像只能这样通过输出流输入流来获取
Ⅳ 关于java exec函数执行带参数的C程序问题
参考资料:
前段时间因为项目开发,需要在ubuntu环境下用servlet去调用c语言写的一个shell应用程序,对于在java语言中调用可执行程序,往往都采用了exec函数,于是也采纳了这一方法,没想到调用后执行发现没有任何发现,我想是不是因为tomcat服务器的权限不够,于是通过chmod 777 ***把权限赋予给了tomcat,试了一下还是没有反应,为什么呢,后来根据网上的查询,发现也出现很多类似的问题,用exec("ifconfig")等运行没问题,用自己编写的shell程序却没有执行,服务器也没有报什么错误,我想肯定是我编写的shell程序跟系统的shell程序有什么不同之处,这个让我想到了环境变量的设置,于是开始假设是不是因为我的shell程序路径问题呢,为了进行这个试验,我想看下exec执行命令的当前路径在哪里,好,采用exec("ls");运行后发现是在tomcat安装目录下的bin文件夹下面,原来是因为我自己写的shell程序没有放在这个下面,于是我把自己写的shell程序放到这个下面就可以了。问题也解决了。
Ⅵ java Runtime.exec 异常
1 Runtime.getRuntime()返回Process对象
2 Process对象拥有输入流和输出流
3 Process对象具有waitFor效应,命令有可能执行不成功!
4 先写入输入流,然后从Process里面读出输出命令即可。
5 以下是比较成功的方法,doc下面的命令几乎都能成功!
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.util.LinkedList;
public class Command {
private java.lang.Process p;
private InputStream is;
private OutputStream os;
private BufferedWriter bw;
private BufferedReader br;
private ProcessBuilder pb;
private InputStream stdErr;
public Command() {
}
//获取Process的输入,输出流
public void setCmd(String cmd) {
try {
p = Runtime.getRuntime().exec(cmd);
os = p.getOutputStream();
is = p.getInputStream();
stdErr = p.getErrorStream();
} catch (IOException e) {
System.err.println(e.getMessage());
}
}
//向Process输出命令
public void writeCmd(String cmd) {
try {
bw = new BufferedWriter(new OutputStreamWriter(os));
bw.write(cmd);
bw.newLine();
bw.flush();
bw.close();
} catch (Exception e) {
e.printStackTrace();
}
}
//读出Process执行的结果
public String readCmd() {
StringBuffer sb = new StringBuffer();
br = new BufferedReader(new InputStreamReader(is));
String buffer = null;
try {
while ((buffer = br.readLine()) != null) {
sb.append(buffer + "\n");
}
System.out.println(p.waitFor());
} catch (Exception e) {
e.printStackTrace();
}
return sb.toString();
}
//将命令一股脑塞入list中
public LinkedList<String> doCmd(LinkedList<String> lists) {
LinkedList<String> list = new LinkedList<String>();
for (String s : lists) {
writeCmd(s);
list.add(readCmd());
}
return list;
}
public static void main(String[] args) {
Command cmd = new Command();
cmd.setCmd("cmd");
cmd.writeCmd(" d:\\stock.xml d:\\backStock.xml");
System.out.println(cmd.readCmd());
//LinkedList<String> list = new LinkedList<String>();
//list.add("dir/b");
//list = cmd.doCmd(list);
// for(String s:list){
// System.out.print(s);
// }
}
}
Ⅶ Java如何禁用exec等系统函数
似乎是有可能配置 Java 2 Security 来做这件事,不过要知道配置这个文件是非常繁琐的事情,因为它相当于一个白名单,要把所有允许的都列出来,本来你只想禁用一个功能却需要列举很多种允许的事情,这会非常痛苦。你看是不是在 policytool 中除了 grant 之外还有 revoke 或 deny 之类的功能来设定黑名单。
比如可能导致 Java 反射这种平时允许的操作也无法正常工作。
在 JDK 目录下的 in 下面有一个 policytool 程序,启动它来创建你的 Java 2 Security Policy,然后在你的程序的命令行多加一个参数 -Djava.security.policy=你的policy文件路径(全名哦)
我觉得你设定这个 Java 程序启动时用指定的操作系统用户身份来运行可能更容易在操作系统方面控制它能访问什么程序,这样就算它执行了exec 也会被操作系统拦截的。
Ⅷ JAVA 关于exec调用cmd
cmd.exe /c javac C:\\Documents and Settings\\Administrator\\桌面\temp\\A.java
javac:无效的标志 用法 javac <options> <source files>
你可能没有正确的配置环境变量
开发的时候最好借助工具 这样可以省去很多找文件的过程 数据输出也更加明了
Ⅸ java 中如何用exec()执行“java "命令行运行某个文件夹下的 .class文件
因为java命令后面紧跟的是[包名/]类名 ,上面的命令解释器会解释成执行名字叫H:\IOtest的类 ,所以会报错。正确的执行方法应该是你首先把当前目录变成包所在的目录,如果没包含于包的话就是该类所在的目录,或者是把上述目录设置成classpath ,然后执行java [包名/]类名
先执行exec("cd /d H:"); 然后 exec("java IOtest");
或者是 先 exec("set classpath=H://"); 然后 exec("java IOtest");
Ⅹ exec()怎样调用java.exe并执行.class文件
Processp=Runtime.getRuntime().exec("cmd");//建议使用cmd
OutputStreamout=p.getOutputStream();
out.write("c: ".getBytes());//切换到C盘
out.write("cdUsers\Administrator\Desktop ".getBytes());//切换目录到桌面
out.write("javacTest.java ".getBytes());//执行你原来的那个命令
out.write("javaTest ".getBytes());//执行javaTest,因为用的同一个cmd进程
//所以cmd里边的目录没变,执行java和javac时就不用重复设定路径。
//这里还可以用startjavaTest这样就能将Test从另一个java虚拟机中启动,不过也就得不到InputStram了
out.flush();
当然也可以直接就这么执行:
Runtime.getRuntime().exec("javaTest-classpathC:\Users\Administrator\Desktop");//直接用这个命令执行java需要把classpath以参数的形式传进去,否则会提示找不到主类。如果出错可能是因为classpath需要将jdk的运行时环境也包含进去,用cmd来调用java的话就可以避免自己来设置这些了。