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
