本文介绍了创建一个“命令”安慰的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个不寻常的问题:如何使用Swing创建命令控制台?



我想拥有的是一个用户控制台输入命令,按回车键,命令输出显示在。我不想让用户更改提示和旧输出。我在考虑像Windows CMD.EXE这样的东西。



我看了问题,但它没有回答我的问题。

解决方案

BeanShell提供了一个JConsole,一个命令行输入控制台,具有以下功能:




  • 一个闪烁的光标

  • 命令历史记录

  • 剪切/复制/粘贴,包括使用CTRL +箭头键选择

  • 命令完成

  • Unicode字符输入

  • 彩色文本输出

  • ...它们都包含在滚动窗格中。



可以从和来源可通过SVN从 svn co http://ikayzo.org/svn/beanshell

有关JConsol的更多信息请参阅



以下是在应用程序中使用BeanShell的JConsole的示例:

  import java.awt.Color中; 
import java.io.BufferedReader;
import java.io.IOException;
import java.io.Reader;

import javax.swing.JFrame;

import bsh.util.GUIConsoleInterface;
import bsh.util.JConsole;

/ **
*在
*您自己的应用程序中使用BeanShell项目的JConsole的示例。
*
* JConsole是一个命令行输入控制台,支持
*用于命令历史记录,剪切/复制/粘贴,闪烁光标,
*命令完成,Unicode字符输入,彩色文本
*输出并包含在滚动窗格中。
*
*欲了解更多信息,请参阅http://www.beanshell.org/manual/jconsole.html
*
* @author tukushan
* /
public class JConsoleExample {

public static void main(String [] args){

//定义一个框架并为其添加一个控制台
JFrame frame = new JFrame(JConsole示例);

JConsole console = new JConsole();

frame.getContentPane()。add(console);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(600,400);

frame.setVisible(true);

inputLoop(console,JCE(退出时键入'quit'):);

System.exit(0);
}

/ **
*打印提示和echos命令通过JConsole
*
* @param控制台输入一个GUIConsoleInterface除了
*基本输入和输出还提供彩色文本
*输出和名称完成
* @param提示文本在每个输入行之前显示
* /
private static void inputLoop (GUIConsoleInterface控制台,字符串提示){
Reader input = console.getIn();
BufferedReader bufInput = new BufferedReader(input);

String newline = System.getProperty(line.separator);

console.print(prompt,Color.BLUE);

字符串行;
try {
while((line = bufInput.readLine())!= null){
console.print(you typed:+ line + newline,Color.ORANGE);

//尝试同步控制台
//System.out.flush();
//System.err.flush();
//Thread.yield(); //这有助于

if(line.equals(quit))break;
console.print(prompt,Color.BLUE);
}
bufInput.close();
} catch(IOException e){
e.printStackTrace();
}

}
}

注意: JConsole返回;如果您单独按Enter键。


I have a bit of an unusual question: How can I create a "Command Console" using Swing?

What I want to have is a console where the users type in commands, press enter, and the output from the command is displayed under. I don't want to allow the user to change the "prompt" and older output. I am thinking of something like Windows CMD.EXE.

I had a look at this question, however it doesn't answer my question.

解决方案

BeanShell provides a JConsole, a command line input console with the following features:

  • a blinking cursor
  • command history
  • cut/copy/paste including selection with CTRL+arrow keys
  • command completion
  • Unicode character input
  • coloured text output
  • ...and it all comes wrapped in a scroll pane.

The BeanShell JARs are available from http://www.beanshell.org/download.html and the source is available via SVN from svn co http://ikayzo.org/svn/beanshell

For more info on JConsole see http://www.beanshell.org/manual/jconsole.html

Here is an example of using BeanShell's JConsole in your application:

import java.awt.Color;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.Reader;

import javax.swing.JFrame;

import bsh.util.GUIConsoleInterface;
import bsh.util.JConsole;

/**
 * Example of using the BeanShell project's JConsole in
 * your own application.
 *
 * JConsole is a command line input console that has support
 * for command history, cut/copy/paste, a blinking cursor,
 * command completion, Unicode character input, coloured text
 * output and comes wrapped in a scroll pane.
 *
 * For more info, see http://www.beanshell.org/manual/jconsole.html
 *
 * @author tukushan
 */
public class JConsoleExample {

    public static void main(String[] args) {

        //define a frame and add a console to it
        JFrame frame = new JFrame("JConsole example");

        JConsole console = new JConsole();

        frame.getContentPane().add(console);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(600,400);

        frame.setVisible(true);

        inputLoop(console, "JCE (type 'quit' to exit): ");

        System.exit(0);
    }

    /**
     * Print prompt and echos commands entered via the JConsole
     *
     * @param console a GUIConsoleInterface which in addition to
     *         basic input and output also provides coloured text
     *         output and name completion
     * @param prompt text to display before each input line
     */
    private static void inputLoop(GUIConsoleInterface console, String prompt) {
        Reader input = console.getIn();
        BufferedReader bufInput = new BufferedReader(input);

        String newline = System.getProperty("line.separator");

        console.print(prompt, Color.BLUE);

        String line;
        try {
            while ((line = bufInput.readLine()) != null) {
                console.print("You typed: " + line + newline, Color.ORANGE);

                // try to sync up the console
                //System.out.flush();
                //System.err.flush();
                //Thread.yield();  // this helps a little

                if (line.equals("quit")) break;
                console.print(prompt, Color.BLUE);
            }
            bufInput.close();
        } catch (IOException e) {
            e.printStackTrace();
        }

    }
}

NB: JConsole returns ";" if you hit Enter by itself.

这篇关于创建一个“命令”安慰的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

07-18 06:16