这是摘自JAVA NB 网 http://www.javanb.com 上的例子。
如何用java启动windows命令行程序: http://www.javanb.com/java/1/17740.html
先请编译和运行下面程序:
import java.util.*;
import java.io.*;
public class BadExecJavac2
{
public static void main(String args[])
{
try
{
Runtime rt = Runtime.getRuntime();
Process proc = rt.exec("javac");
int exitVal = proc.waitFor();
System.out.println("Process exitValue: " + exitVal);
} catch (Throwable t){
t.printStackTrace();
}
}
}
我们知道javac命令,当不带参数运行javac 程序时,它将输出帮助说明,为什么上面程序不产生任何输出并挂起,永不完成呢?java文档上说,由于有些本地平台为标准输入和输出流所提供的缓冲区大小有限,如果不能及时写入子进程的输入流或者读取子进程的输出流,可能导致子进程阻塞,甚至陷入死锁。所以,上面的程序应改写为:
import java.util.*;
import java.io.*;
public class MediocreExecJavac
{
public static void main(String args[])
{
try
{
Runtime rt = Runtime.getRuntime();
Process proc = rt.exec("javac");
InputStream stderr = proc.getErrorStream();
InputStreamReader isr = new InputStreamReader(stderr);
BufferedReader br = new BufferedReader(isr);
String line = null;
System.out.println("");
while ( (line = br.readLine()) != null)
System.out.println(line);
System.out.println("");
int exitVal = proc.waitFor();
System.out.println("Process exitValue: " + exitVal);
} catch (Throwable t){
t.printStackTrace();
}
}
}
下面是正确的输出:
D:\java>java MediocreExecJavac
Usage: javac 〈OPTIONs>
where possible options include:
-g Generate all debugging info
-g:none Generate no debugging info
-g:{lines,vars,source} Generate only some debugging info
-nowarn Generate no warnings
-verbose Output messages about what the compiler is doing
-deprecation Output source locations where deprecated APIs are used
-classpath Specify where to find user class files
-cp Specify where to find user class files
-sourcepath Specify where to find input source files
-bootclasspath Override location of bootstrap class files
-extdirs Override location of installed extensions
-endorseddirs Override location of endorsed standards path
-d Specify where to place generated class files
-encoding Specify character encoding used by source files
-source Provide source compatibility with specified release
-target Generate class files for specific VM version
-version Version information
-help Print a synopsis of standard options
-X Print a synopsis of nonstandard options
-J Pass directly to the runtime system
Process exitValue: 2
D:\java>
下面是一个更一般的程序,它用两个线程同步清空标准错误流和标准输出流,并能根据你所使用的windows操作系统选择windows命令解释器command.com或cmd.exe,然后执行你提供的命令。
import java.util.*;
import java.io.*;
class StreamGobbler extends Thread
{
InputStream is;
String type; //输出流的类型ERROR或OUTPUT
StreamGobbler(InputStream is, String type)
{
this.is = is;
this.type = type;
}
public void run()
{
try
{
InputStreamReader isr = new InputStreamReader(is);
BufferedReader br = new BufferedReader(isr);
String line=null;
while ( (line = br.readLine()) != null)
{
System.out.println(type + ">" + line);
System.out.flush();
}
} catch (IOException ioe)
{
ioe.printStackTrace();
}
}
}
public class GoodWindowsExec
{
public static void main(String args[])
{
if (args.length < 1)
{
System.out.println("USAGE: java GoodWindowsExec ");
System.exit(1);
}
try
{
String osName = System.getProperty("os.name" );
System.out.println("osName: " + osName);
String[] cmd = new String[3];
if(osName.equals("Windows XP") ||osName.equals("Windows 2000"))
{
cmd[0] = "cmd.exe" ;
cmd[1] = "/C" ;
cmd[2] = args[0];
}
else if( osName.equals( "Windows 98" ) )
{
cmd[0] = "command.com" ;
cmd[1] = "/C" ;
cmd[2] = args[0];
}
Runtime rt = Runtime.getRuntime();
System.out.println("Execing " + cmd[0] + " " + cmd[1]+ " " + cmd[2]);
Process proc = rt.exec(cmd);
// any error message?
StreamGobbler errorGobbler = new StreamGobbler(proc.getErrorStream(), "ERROR");
// any output?
StreamGobbler outputGobbler = new StreamGobbler(proc.getInputStream(), "OUTPUT");
// kick them off
errorGobbler.start();
outputGobbler.start();
// any error???
int exitVal = proc.waitFor();
System.out.println("ExitValue: " + exitVal);
} catch (Throwable t){
t.printStackTrace();
}
}
}
下面是一个测试结果:
D:\java>java GoodWindowsExec " Test.java Test1.java"
osName: Windows XP
Execing cmd.exe /C Test.java Test1.java
OUTPUT>已复制 1 个文件。
ExitValue: 0
D:\java>
下面的测试都能通过(windows xp+jdk1.5)
D:\java>java GoodWindowsExec dir
D:\java>java GoodWindowsExec Test.java
D:\java>java GoodWindowsExec regedit.exe
D:\java>java GoodWindowsExec NOTEPAD.EXE
D:\java>java GoodWindowsExec first.ppt
D:\java>java GoodWindowsExec second.doc
function TempSave(ElementID) { CommentsPersistDiv.setAttribute("CommentContent",document.getElementById(ElementID).value); CommentsPersistDiv.save("CommentXMLStore"); } function Restore(ElementID) { CommentsPersistDiv.load("CommentXMLStore"); document.getElementById(ElementID).value=CommentsPersistDiv.getAttribute("CommentContent"); }
❷ 如何在windows命令行窗口运行Java程序
你好,
先配置环境变量,确保Java安装程序的\bin子目录在path变量中;
用javac命令把源文件(即扩展名为java的文件)编译成字节码文件;
用java命令运行对应的字节码文件。
❸ 如何在windows命令行窗口运行Java程序
在安装了jdk的电脑上都是可以运行Java程序的,当运行测试一些小程序的时候就不必在IDE中了。下面用一个简单的HelloWorld程序看一下运行过程。。
工具/原料
确定配置好了Java运行的环境。
方法/步骤
1
新建一个文本文件,就用windows的记事本吧。
2
打开记事本,输入一段代码。
3
保存的时候把后缀名修改为.java。
4
打开运行,在运行输入栏中输入cmd。打开命令提示窗口。
5
先转到.java文件所在的位置。这里是在d盘的根目录。
6
执行以下一句命令之后,可以看见在.java的文件夹里面生成了一个为.class的类文件。
7
执行以下命令之后,就可以看到结果了。。
END
注意事项
确信要配置好Java运行环境。否则不能运行。
❹ windows下如何用java命令运行jar包
step1:用eclipse导出(也可以用jar命令)jar包,并指定Main-Class,比如Main-Class:com.skymobi.csj.CsjMain step2:编写bat step2.1:添加classpath,要将所有依赖的jar和properties用绝对路径加入,注意必须绝对路径,然后还要加上自己要运行的jar包 set classpath=%classpath%;c:\test\skyopi.properties;c:\test\skyopi-1.0.6.jar;c:\test\slf4j-api-1.5.3.jar;c:\test\slf4j-log4j12-1.5.3.jar;c:\test\commons-logging-1.1.1.jar; c:\test\log4j-1.2.15.jar;c:\test\commons-httpclient-3.1.jar;c:\test\mole-framwork-1.5.jar;c:\test\mina-core-2.0.0-RC1.jar;c:\test\log4j.properties; c:\test\csj_skyserver.jar step2.2:添加执行脚本 java com.skymobi.csj.CsjMain MoleID=0xA000 MoleInstID=0xA001 step3: 将写好的脚步和依赖的所有jar和配置放到c:/test下(如果这个地址改了,上面的classpath里要做相应的改变) step4.:用你的鼠标双击bat,hava fun ^-^ 注意:java -classpath 。。。。-jarcsj_skyserver.jar arg0 证明无法调用依赖的其他包
❺ 怎么使用java调用windows下dos命令
1. 使用Process类操作
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.SequenceInputStream;
public class Processing
{
public static void main ( String[] args ) throws InterruptedException
{
try
{
// open cmd
// Process process = Runtime.getRuntime ().exec (new String[] {
// "cmd", "/c", "dir" }, null, new File ("e:/"));
Process process = Runtime.getRuntime ().exec ("cmd");
SequenceInputStream sis = new SequenceInputStream (process.getInputStream (), process.getErrorStream ());
InputStreamReader isr = new InputStreamReader (sis, "GBK");
BufferedReader br = new BufferedReader (isr);
// next command
OutputStreamWriter osw = new OutputStreamWriter (process.getOutputStream ());
BufferedWriter bw = new BufferedWriter (osw);
bw.write ("cd C:/WINDOWS/audio/");
bw.newLine ();
bw.write ("c:");
bw.newLine ();
bw.write ("ffmpeg -i keyboard.wav keyboard.mp3");
bw.newLine ();
bw.flush ();
bw.close ();
osw.close ();
// read
String line = null;
while (null != ( line = br.readLine () ))
{
System.out.println (line);
}
// wait for termination
/*process.waitFor ();
process.exitValue ();*/
process.destroy ();
br.close ();
isr.close ();
}
catch (IOException e)
{
e.printStackTrace ();
}
// catch (InterruptedException e)
// {
// e.printStackTrace ();
// }
}
}
2. 使用ProcessBuilder类操作。
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.LinkedList;
public class TestProcessBuilder
{
public static void main ( String[] args ) throws Exception
{
ProcessBuilder builder = new ProcessBuilder ("cmd", "/c", "ipconfig /all");
// builder.directory (new File ("C:\\WINDOWS\\audio"));
Process process = builder.start ();
InputStream is = process.getInputStream ();
InputStreamReader isr = new InputStreamReader (is, "GBK");
BufferedReader br = new BufferedReader (isr);
LinkedList<String> list = new LinkedList<String> ();
String line;
String regex = ".*Ethernet adapter(.*)\\:.*";
while (null != ( line = br.readLine () ))
{
if (!"".equals (line))
{
if (line.matches (regex))
{
list.add (line.replaceAll (regex, "$1"));
}
System.out.println (line);
}
}
br.close ();
isr.close ();
is.close ();
process.destroy ();
System.out.println (list);
}
}
3. 使用Runtime操作。
❻ 如何用windows 命令行编译java
你首先得安装jdk,安装好jdk后,在命令窗口输入java -version回车,如果下面显示了java version "1.x.x.x"的版本信息就说明安装成功了,至于jdk如何安装,exe自动配置版的,也有手动配置版的,可以自行网络有很多教程。不懂的问题可以继续追问
❼ java 怎么调用windows外部命令
可以使用Java Process类,下面是一些例子:
Process类是一个抽象类,方法都是抽象的,它封装了一个进程,也就是一个可执行的程序该类提供进程的输入、执行输出到进程、等待进程的完成和检查进程的退出状态及销毁进程的方法
ProcessBuilder.start()和Runtime.exec方法创建一个本机进程并返回Process子类的一个实例,该实例可以控制进程并获取相关的信息
其它的概要请参考JDK文档
下面就开始举几个简单的示例:
(1)执行简单的DOS命令,如打开一个记事本
Java代码
packagecom.iwtxokhtd.other;
importjava.io.IOException;
publicclassProcessTest{
publicstaticvoidmain(String[]args){
try{
Processproc=Runtime.getRuntime().exec("notepad");
}catch(IOExceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}
}
}
[java]viewplain
packagecom.iwtxokhtd.other;
importjava.io.IOException;
publicclassProcessTest{
publicstaticvoidmain(String[]args){
try{
Processproc=Runtime.getRuntime().exec("notepad");
}catch(IOExceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}
}
}
(2)使用它的其它构造方法执行相关的命令,如下例:
Java代码
packagecom.iwtxokhtd.other;
importjava.io.IOException;
publicclassProcessTest{
publicstaticvoidmain(String[]args){
try{
StringexeFullPathName="C:/ProgramFiles/InternetExplorer/IEXPLORE.EXE";
Stringmessage="www.google.com";
String[]cmd={exeFullPathName,message};
Processproc=Runtime.getRuntime().exec(cmd);
}catch(IOExceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}
}
}
[java]viewplain
packagecom.iwtxokhtd.other;
importjava.io.IOException;
publicclassProcessTest{
publicstaticvoidmain(String[]args){
try{
StringexeFullPathName="C:/ProgramFiles/InternetExplorer/IEXPLORE.EXE";
Stringmessage="www.google.com";
String[]cmd={exeFullPathName,message};
Processproc=Runtime.getRuntime().exec(cmd);
}catch(IOExceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}
}
}
执行上述命令可以打开Google网站
(3)列出系统正在运行的所有进程信息
Java代码
packagecom.iwtxokhtd.other;
importjava.io.BufferedReader;
importjava.io.IOException;
importjava.io.InputStreamReader;
publicclassListAllProcessTest{
//列出所有的进程信息
publicstaticvoidmain(String[]args){
BufferedReaderbr=null;
try{
Processproc=Runtime.getRuntime().exec("tasklist");
br=newBufferedReader(newInputStreamReader(proc.getInputStream()));
@SuppressWarnings("unused")
Stringline=null;
System.out.println("打印所有正在运行的进程信息");
while((line=br.readLine())!=null){
System.out.println(br.readLine());
}
}catch(IOExceptione){
e.printStackTrace();
}finally{
if(br!=null){
try{
br.close();
}catch(Exceptione){
e.printStackTrace();
}
}
}
}
}
[java]viewplain
packagecom.iwtxokhtd.other;
importjava.io.BufferedReader;
importjava.io.IOException;
importjava.io.InputStreamReader;
publicclassListAllProcessTest{
//列出所有的进程信息
publicstaticvoidmain(String[]args){
BufferedReaderbr=null;
try{
Processproc=Runtime.getRuntime().exec("tasklist");
br=newBufferedReader(newInputStreamReader(proc.getInputStream()));
@SuppressWarnings("unused")
Stringline=null;
System.out.println("打印所有正在运行的进程信息");
while((line=br.readLine())!=null){
System.out.println(br.readLine());
}
}catch(IOExceptione){
e.printStackTrace();
}finally{
if(br!=null){
try{
br.close();
}catch(Exceptione){
e.printStackTrace();
}
}
}
}
}
(4)判断一个具体的进程是否正在运行,如下例:
Java代码
packagecom.iwtxokhtd.other;
importjava.io.BufferedReader;
importjava.io.InputStreamReader;
publicclassFindProcessExeTest
{
publicstaticvoidmain(String[]args){
if(findProcess("QQ.exe")){
System.out.println("------判断指定的进程是否在运行------");
System.out.println("QQ.exe该进程正在运行!");
}else{
System.out.println("------判断指定的进程是否在运行------");
System.out.println("QQ.exe该进程没有在运行!");
}
}
(StringprocessName){
BufferedReaderbr=null;
try{
//下面这句是列出含有processName的进程图像名
Processproc=Runtime.getRuntime().exec("tasklist/FI/"IMAGENAMEeq"+processName+"/"");
br=newBufferedReader(newInputStreamReader(proc.getInputStream()));
Stringline=null;
while((line=br.readLine())!=null){
//判断指定的进程是否在运行
if(line.contains(processName)){
returntrue;
}
}
returnfalse;
}catch(Exceptione){
e.printStackTrace();
returnfalse;
}finally{
if(br!=null){
try{
br.close();
}catch(Exceptionex){
}
}
}
}
}
[java]viewplain
packagecom.iwtxokhtd.other;
importjava.io.BufferedReader;
importjava.io.InputStreamReader;
publicclassFindProcessExeTest
{
publicstaticvoidmain(String[]args){
if(findProcess("QQ.exe")){
System.out.println("------判断指定的进程是否在运行------");
System.out.println("QQ.exe该进程正在运行!");
}else{
System.out.println("------判断指定的进程是否在运行------");
System.out.println("QQ.exe该进程没有在运行!");
}
}
(StringprocessName){
BufferedReaderbr=null;
try{
//下面这句是列出含有processName的进程图像名
Processproc=Runtime.getRuntime().exec("tasklist/FI/"IMAGENAMEeq"+processName+"/"");
br=newBufferedReader(newInputStreamReader(proc.getInputStream()));
Stringline=null;
while((line=br.readLine())!=null){
//判断指定的进程是否在运行
if(line.contains(processName)){
returntrue;
}
}
returnfalse;
}catch(Exceptione){
e.printStackTrace();
returnfalse;
}finally{
if(br!=null){
try{
br.close();
}catch(Exceptionex){
}
}
}
}
}
其它的用法可以参考JDK文档,这里就不一一举例,毕竟它用得不多。
❽ 如何在windows命令行窗口运行Java程序
1、首先,运行Java程序,需要安装好jdk
2、在windows命令行窗口输入java和javac验证环境变量path是否配置好
3、编写好正确的java小程序
4、在windows命令行进入到程序所在路径下,javac编译,会在原有程序下新生成一个.class文件,java运行.class文件,就可以成功运行Java程序啦
❾ 编译java程序的命令是什么,运行java应用程序的命令是什么
当前默认目录为C盘Users文件夹下的Administrator文件夹。一般而言,我们习惯改变当前目录。由于windows有磁盘分区,若要跳到其他磁盘,例如E盘,有几种方法:
1、输入命令: pushd 路径(此命令可将当前目录设为所希望的任一个已存在的路径)
2、输入命令: e: 转移到e盘,然后再输入 cd 转移到所希望的已知路径。
希望在windows命令行下使用javac、java、javap等命令,那么当前电脑必须安装了jdk,并且将jdk的bin目录添加到环境变量path下了。
拓展资料:
Java是一种编程语言,被特意设计用于互联网的分布式环境。Java具有类似于C++语言的“形式和感觉”,但它要比C++语言更易于使用,而且在编程时彻底采用了一种“以对象为导向”的方式。
使用Java编写的应用程序,既可以在一台单独的电脑上运行,也可以被分布在一个网络的服务器端和客户端运行。另外,Java还可以被用来编写容量很小的应用程序模块或者applet,做为网页的一部分使用。applet可使网页使用者和网页之间进行交互式操作。