Java – create a command console
I have an unusual question: how to use swing to create a "command console"?
What I want is the console where the user types the command, presses enter, and displays the output of the command I don't want to allow users to change the "prompt" and old output I'm imagining windows CMD Something like exe
I read a question about this, but it didn't answer my question
Solution
BeanShell provides a jconsole, a command line input console, with the following functions:
>The flashing cursor > command history > cut / copy / paste, including using the CTRL arrow keys to Select > command completion > Unicode character input > color text output >... Is wrapped in the scroll pane
BeanShell jars are available from http://www.beanshell.org/download.html The source can be obtained from SVN co through SVN http://ikayzo.org/svn/beanshell
For more information about jconsole, see http://www.beanshell.org/manual/jconsole.html
The following is an example of using the jconsole of BeanShell 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(); } } }
Note: jconsole returns ";" If you press enter yourself