当前位置:  技术问答>java相关

关于在java中调用操作系统命令的奇怪问题,100分送上。

    来源: 互联网  发布时间:2015-11-09

    本文导语:  我在编写一个执行操作系统命令的时候遇到了以下问题:当我第一次运行 class PT { String strcmd=null; Runtime r;   Process p;   BufferedReader br=null;   StringBuffer sb=new StringBuffer();   String inline;   String retu;   public Strin...

我在编写一个执行操作系统命令的时候遇到了以下问题:当我第一次运行


class PT
{
String strcmd=null;
Runtime r;
  Process p;
  BufferedReader br=null;
  StringBuffer sb=new StringBuffer();
  String inline;
  String retu;
 

public String cmd(String str) throws IOException
{
//br=null;
//strcmd=null;
if(str!=null && str!="") strcmd="cmd /c "+str;//strcmd就是运行的命令
//通过strcmd是否为空进行判断是否要运行系统命令,但问题在于当strcmd不是空的时候,同样会调用strcmd==null 里面的语句,why?
if(strcmd!=null)
{
System.out.println(strcmd);
r=Runtime.getRuntime();
p=r.exec(strcmd);
br=new BufferedReader(new InputStreamReader(p.getInputStream()));


while(null!=(inline=br.readLine())){
  sb.append(inline).append("n");
  }
 
  retu=sb.toString();//将命令结果返回
  sb=null;
  return(retu);
  }
  else
  {
  System.out.println(strcmd);
   return("111");
  }

}
}



第一次输入 cd 的显示结果
cmd /c cd
E:MYLEARNMY

第二次输入cd 的结果:多了一个 null值,但为什么会产生这个值,实在不明白
cmd /c cd
E:MYLEARNMY

null
111


第三次输入cd 的结果:多了两个 null值,但为什么会产生这个值,实在不明白

cmd /c cd
E:MYLEARNMY

null
111
null
111

第四次:多了三个 null值,
cmd /c cd
E:MYLEARNMY

null
111
null
111
null
111

|
class cmdl implements KeyListener
{
int keycode;
public void keyPressed(KeyEvent e)
{
keycode=e.getKeyCode();
if(keycode==10)
{
cmdLine.addActionListener(new cmdb());   //一个回车就会加一个cmdb(),所以有那种错误。把cmdb()中的内容放到这就可以了。

}
}

public void keyReleased(KeyEvent e) {}
public void keyTyped(KeyEvent e) {}

}

|
这是文本框(3次后)的
E:
E:
E:
这是系统终端的
E:

Before Set E:

After Set E:

E:
E:

Before Set E:
E:

After Set E:
E:

E:
E:
E:

Before Set E:
E:
E:

After Set E:
E:
E:

不觉得有任何奇怪啊,不知你想说什么,这是我改成我得习惯后的代码:
//MenuDemo.java
import java.io.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class Terminal extends JFrame {
JMenuBar menu=new JMenuBar();
JMenu    mnuFile=new JMenu("Îļþ");
JMenu    mnuEdit=new JMenu("±à¼­");
JMenu    mnuSet =new JMenu("ÉèÖÃ");
JMenu    mnuHelp=new JMenu("°ïÖú");

JMenuItem mnuFileNew   =new JMenuItem("н¨");
JMenuItem mnuFileOpen  =new JMenuItem("´ò¿ª");
JMenuItem mnuFileSave  =new JMenuItem("±£´æ");
JMenuItem mnuFileSaveAs=new JMenuItem("Áí´æΪ");
JMenuItem mnuFilePrint  =new JMenuItem("´òÓ¡");
JMenuItem mnuFileExit  =new JMenuItem("Í˳ö");

JMenuItem mnuCopy =new JMenuItem("¸´ÖÆ");
JMenuItem mnuCut  =new JMenuItem("¼ôÇÐ");
JMenuItem mnuPaste=new JMenuItem("Õ³Ìù");

JMenuItem mnuBackColor=new JMenuItem("±³¾°ÉèÖÃ");
JMenuItem mnuFontset  =new JMenuItem("×ÖÌåÉèÖÃ");

JMenuItem mnusubHelp  =new JMenuItem("°ïÖú");
JMenuItem mnuAbout =new JMenuItem("¹ØÓÚ");

JLabel cmdLabel=new JLabel("ÃüÁîÐÐ:");
JTextArea  resArea=new JTextArea(15,20);
JTextField cmdLine1=new JTextField(5);
JTextField cmdLine=new JTextField(35);
JButton    cmdButton=new JButton("go");
JPanel     cmdPanel=new JPanel();
JScrollPane ps=new JScrollPane();

public Terminal() {
this("Systemcommand Terminal");
}
public Terminal(String str) {
super(str);
Container content=getContentPane();
content.setLayout(new BorderLayout());
//Ìí¼Ó´°Ìå×é¼þ

cmdPanel.add(cmdLabel);
cmdPanel.add(cmdLine1);
cmdPanel.add(cmdLine);
cmdPanel.add(cmdButton);
ps=new JScrollPane(resArea);

content.add(ps,BorderLayout.CENTER);
content.add(cmdPanel,BorderLayout.SOUTH);

//ÒÔÏÂÊÇÌí¼Ó²Ëµ¥ÃüÁî
this.setJMenuBar(menu);

mnuFile.add(mnuFileNew);
mnuFile.add(mnuFileOpen);
mnuFile.add(mnuFileSave);
mnuFile.add(mnuFileSaveAs);
mnuFile.addSeparator();
mnuFile.add(mnuFilePrint);
mnuFile.add(mnuFileExit);

mnuEdit.add(mnuCopy);
mnuEdit.add(mnuCut);
mnuEdit.add(mnuPaste);

mnuSet.add(mnuBackColor);
mnuSet.add(mnuFontset);

mnuHelp.add(mnusubHelp);
mnuHelp.add(mnuAbout);

menu.add(mnuFile);
menu.add(mnuEdit);
menu.add(mnuSet);
menu.add(mnuHelp);

//¿ªÊ¼Ê¼þÕìÌý
addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});

cmdButton.addActionListener(new CmdProccessor());
cmdLine.addKeyListener(new CmdLine());
}

class CmdProccessor implements ActionListener {
String strLine;
String strArea;
String strRes;
PT ptcmd=new PT();

public void actionPerformed(ActionEvent e) {
cmdLine.selectAll();
resArea.selectAll();
strLine=cmdLine.getSelectedText();
strArea=resArea.getSelectedText();

if(strLine==null) strLine="";
if(strArea==null) strArea="";

try {
strRes=ptcmd.cmd(strLine);
} catch(IOException IOE) {
System.out.println("error");
}
System.out.println("Before Set "+strRes);
resArea.setText(strRes);
System.out.println("After Set "+strRes);
cmdLine.setText("");
}
}
class CmdLine implements KeyListener {
public void keyPressed(KeyEvent e) {
int keycode=e.getKeyCode();
if(keycode==10) {
cmdLine.addActionListener(new CmdProccessor());
}
}
public void keyReleased(KeyEvent e) {}
public void keyTyped(KeyEvent e) {}
}

public static void main(String args[]) {
Terminal  ter=new Terminal();
ter.pack();
ter.show();
}
}

//ÏÂÃæÊǵ÷ÓÃϵͳÃüÁîµÄº¯Êý
class PT {
String strCmd=null;
  Process p;
  BufferedReader br=null;
  StringBuffer sb=new StringBuffer();
  String inLine;
 
public String cmd(String str) throws IOException {
//br=null;
//strCmd=null;
if(str!=null && str!="") strCmd="cmd /c "+str;
if(strCmd!=null) {
// System.out.println(strCmd);
p=Runtime.getRuntime().exec(strCmd);
br=new BufferedReader(new InputStreamReader(p.getInputStream()));
while(null!=(inLine=br.readLine())) {
  sb.append(inLine).append("n");
  }
System.out.println(sb.toString());
  return(sb.toString());
  } else {
  System.out.println(strCmd);
  return("111");
  }
}
}

    
 
 

您可能感兴趣的文章:

  • http://java.sun.com,谁告之它的IP,50分送上
  • 那里有用JAVA做的B/S结构软件的演示版或源代码下载呀?50分送上!
  • 200分送上,欢迎讨论用java调用vs.net所创建的web服务!
  • 我建议大家开展一下对java2D,3D绘图的讨论!!!有分送噢!
  • 小弟想学学java,请各位高手指点一二!有分送
  • VB编写的DLL不能被JAVA调用,用C将VB编写的DLL包装起来,做成一个新的DLL;用C编写的DLL可以被JAVA调用,用JAVA再进行一层的包装,因为JAV
  • 请问从一个java程序中如何调用另一java程序,并控制可以其状态(最小化、最大化、结束程序),还有怎样知道那个被调用的程序结束。
  • 可不可以用java调用其他语言的编译结果?(好象asp调用com那样)
  • 请问如何在Java中调用一个VB所写的DLL?如何调用这个Dll的方法?如何取得和设置这个Dll的属性值?谢谢!
  • ###java调用COM组件或COM调用java组件(EJB)解决办法。###
  • java线程怎么调用java的application.class?
  • 求救!!如何在java程序中调用外部非java的exe文件?
  • 急!请问有分析java程序性能瓶颈的工具吗?例如,统计 java 程序中函数调用次数?
  • java.awt 和java.util都有List,想调用awt的List而出现Ambiguous class错误怎么办?
  • 一个.java文件中怎样来调用另一个.java文件中的变量及其它东西!
  • java调用sh脚本遇到export命令会卡住,sh不能调用子sh
  • Java能调用OLE对象吗?怎样利用Java生成Excel报表?
  • java打包后如何调用?
  • 请问Java可否调用MsSQL的存储过程,如何调用?
  • 奇怪?我在jsp中调用java类。java类本身编译没错,但jsp中的引用Tomcat总是报错。
  • java能否调用dll或ocx
  • 如何用java调用word?来者给分!·!!!!!
  • 怎么在java里调用一个oracle的procedure呢?
  • 我在APPLET里调用JAVAMAIL发邮件,出现java.security.AccessControlException: access denied (java.util.PropertyPermission * read,write)的错误???
  • 求教!!!VC应用调用Java模块可行吗?
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • redhat7.3下,java程序打印中文直接用java命令执行正常,用crontab执行java命令为乱码
  • java怎样实现 运行dos命令行的命令或者windows的程序
  • Saloris系统下,如何使用java调用setenv命令和source命令????
  • windows命令行中java和javac、javap使用详解(java编译命令)
  • java程序在linux运行,要用Runtime.exec()执行外部命令,可外部命令中关于文件操作的路径都很长,如何使用相对路径.在线等待
  • 请java高手,为我解释一下这个命令是干什么的?《java核心技术2》
  • 运行JAVA命令错误
  • 我用JDK中的javac命令编译一个test.java。系统提示不能打开test.java该文件!!!
  • 如何使用java这个命令?
  • msdos中如何用java命令执行程序
  • 我要生成java 的文档在dos 下用什么命令.
  • 我在执行javac命令的时候没有问题,但是在执行java命令的时候却报如下错误
  • java怎样实现 运行dos命令行的命令或者windows的程序 iis7站长之家
  • java命令执行类文件时不在bin的目录下出现Exception in thread "main" java.lang.NoClassDefFoundError:
  • java中如何执行dos命令,如文件删除等(时间紧急)
  • 关于jre命令替换为java
  • Java程序中如何执行系统命令?
  • 用 java 命令运行 .class 出错,怎么办
  • 怎样用Java调用window命令或启动其它程序?
  • JDK1.3 中的java命令不好用?
  • java命名空间java.sql类types的类成员方法: java_object定义及介绍
  • 我想学JAVA ,是买THINK IN JAVA 还是JAVA2核心技术:卷1 好???
  • java命名空间java.awt.datatransfer类dataflavor的类成员方法: imageflavor定义及介绍
  • 请问Java高手,Java的优势在那里??,Java主要适合于开发哪类应用程序
  • java命名空间java.lang.management类managementfactory的类成员方法: getcompilationmxbean定义及介绍
  • 如何将java.util.Date转化为java.sql.Date?数据库中Date类型对应于java的哪个Date呢
  • java命名空间java.lang.management接口runtimemxbean的类成员方法: getlibrarypath定义及介绍
  • 谁有电子版的《Java编程思想第二版(Thinking in java second)》和《Java2编程详解(special edition java2)》?得到给分
  • java命名空间java.lang.management接口runtimemxbean的类成员方法: getstarttime定义及介绍
  • 本人想学java,请问java程序员的待遇如何,和java主要有几个比较强的方向
  • java命名空间java.awt.datatransfer类dataflavor的类成员方法: stringflavor定义及介绍


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3