全部代码在这里阿,请大家看看//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(60,20);
JTextField cmdLine1=new JTextField(5);
JTextField cmdLine=new JTextField(44);
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);

//开始事件侦听
cmdButton.addActionListener(new cmdb());
cmdLine.addKeyListener(new cmdl());

}

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

ter.addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{
System.exit(0);
}
});
ter.pack();
ter.show();

}

 class cmdb 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");
}
resArea.setText(strres);
System.out.println(strres);
cmdLine.setText("");
}
}
class cmdl implements KeyListener
{
int keycode;
public void keyPressed(KeyEvent e)
{
keycode=e.getKeyCode();
if(keycode==10)
{
cmdLine.addActionListener(new cmdb());

}
}

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

}


}//下面是调用系统命令的函数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;
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");
  }
 
 
 

}
}

解决方案 »

  1.   

    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) {}

    }
      

  2.   

    谢谢niuji,我多试一下,可能我有些很基本的概念没有搞清楚。1、但表面看上去没有问题阿:当键盘为敲“回车”的时候,新建一个cmdb()的实例,为什么会产生一个多加一个cmdb()呢?2、我后面删除了cmd1类,直接通过点击按钮“go”来运行,产生的问题也是同样的阿,为什么?
      

  3.   

    这是文本框(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");
      }
    }
    }
      

  4.   

    我估计你要的结果可能是使用这个类的(代替上面的同名类即可)
    class PT { 
    public String cmd(String str) throws IOException {
    String strCmd=null; if(str!=null && str!="") strCmd="cmd /c "+str;
    if(strCmd!=null) {
    // System.out.println(strCmd);
    Process p=Runtime.getRuntime().exec(strCmd);
    StringBuffer sb=new StringBuffer();
    BufferedReader br=new BufferedReader(new InputStreamReader(p.getInputStream()));
    String inLine=null;
    while(null!=(inLine=br.readLine())) {
      sb.append(inLine).append("\n");
      }
    System.out.println(p);
      return(sb.toString());
      } else {
      System.out.println(strCmd);
      return("111");
      }
    }
    }
      

  5.   

    to ralihm(raly) 
    1.Listener是一直存在的(除非你用remove***Listener注销),所以第二次add的时候第一个Listener还在,两个就会同时起作用。
    2.我试过,正常的。不过PT类最好用Iforgot(清风雨) 的。