最近我试图将普通终端的功能实现到一个图形化设计的基于 Swing 的控制台项目。我喜欢这里的一些人如何使这成为可能,但我偶然发现了另一个大问题。InpuStreamListener
虽然我不太喜欢这个,但有些人实际上谈到了这一点。我工作的示例代码(几乎不完全是我的,但它是我的应用程序的源代码)如下:
// Making an executor
org.apache.commons.exec.DefaultExecutor exec = new org.apache.commons.exec.DefaultExecutor();
// Creating the streams (pretty much ignore this, I just include it as a general idea of the method)
consoleOutputStream = new ConsoleOutputStream();
consoleInputStream = new JTextFieldInputStream(gsc.mainWindow.getConsoleInput().getJTextField());
// Stream Handler with the customized streams I use for the process
org.apache.commons.exec.PumpStreamHandler streamHandler = new org.apache.commons.exec.PumpStreamHandler(consoleOutputStream, consoleOutputStream, consoleInputStream);
// Setting the handler and finally making command line and executing
exec.setStreamHandler(streamHandler);
org.apache.commons.exec.CommandLine commandline = org.apache.commons.exec.CommandLine.parse(String.valueOf(arg));
exec.execute(commandline);
现在的事情是我通常尝试通过这种方法通过java命令运行java应用程序。OutputStream
工作得很好,没有任何缺陷,并且给了我所有应该的东西,但是带有 Input 的应用程序给我带来了很多麻烦。我相信问题在于对System.in
、Scanner
类、Console
类等的硬编码。所以这是我需要一些帮助的(最后):我希望能够直接访问InputStream
传递给我的应用程序或有人向我解释方法如何真正写一个InputStreamListener
当我运行外部java应用程序时偶尔会使用它(是的,我通过我的界面而不是cmd或终端运行它们,我正在尝试在这里制作一个工具)。如果这太复杂,需要我进行大量调整或者通常是不可能的,有人可以帮助我获得通过InputStream
,这样我就可以真正编写一个类,允许我编写特定于我的界面的应用程序?
在此先感谢,甚至感谢您花时间阅读整篇文章!:)