所以我一直在尝试使用这篇文章中的代码在JTextArea 中制作控制台窗口。该代码似乎与我的代码一起运行,但我遇到了一个奇怪的问题。
我的程序:我基本上是在为我最近制作的命令行工具构建一个快速而肮脏的 gui。gui 包含的唯一内容是一个按钮,上面写着“启动自动化引擎”,然后它有一个JTextArea
应该显示我的程序发送到的任何文本的按钮System.out.println()
。
目前它什么也没显示,尽管程序本身正在运行和工作(并且应该显示输出结果。)我注意到当我单击我的 gui 上的按钮时,该按钮在程序运行时保持按下状态。这让我相信JFrame
在程序运行时没有更新,因此JTextArea
作为它的孩子,没有更新。这不太好...
有没有办法JTextArea
在程序在后台运行时更新它?
这是我的代码JFrame
,顺便说一句,如果您想查看它以更好地了解我在说什么。它主要是在 Eclipse 的 WindowBuilder 中构建的。我唯一做的就是添加一个按钮侦听器startAutmoatorEngineButton
,然后添加initalize()
方法的最后几行以将JTextArea
( engineOutput
) 设置为System.out
.
public class EngineGUI {
private JFrame frmAutomatorEngine;
private File logPath = new File("<redacted>", "<redacted>");
private File masterFile = new File("<redacted>", "<redacted>");
/**
* Launch the application.
*/
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
EngineGUI window = new EngineGUI();
window.frmAutomatorEngine.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
/**
* Create the application.
*/
public EngineGUI() {
initialize();
}
/**
* Initialize the contents of the frame.
*/
private void initialize() {
frmAutomatorEngine = new JFrame();
frmAutomatorEngine.setType(Type.UTILITY);
frmAutomatorEngine.setResizable(false);
frmAutomatorEngine.setTitle("Automator Engine");
frmAutomatorEngine.setBounds(100, 100, 636, 335);
frmAutomatorEngine.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JMenuBar menuBar = new JMenuBar();
frmAutomatorEngine.setJMenuBar(menuBar);
JMenu mnEngine = new JMenu("Engine");
menuBar.add(mnEngine);
JMenuItem mntmLoadMasterFile = new JMenuItem("Load Master File...");
mnEngine.add(mntmLoadMasterFile);
JMenuItem mntmExit = new JMenuItem("Exit");
mnEngine.add(mntmExit);
frmAutomatorEngine.getContentPane().setLayout(null);
JTextArea engineOutput = new JTextArea();
engineOutput.setBounds(10, 48, 600, 217);
frmAutomatorEngine.getContentPane().add(engineOutput);
JButton startAutomatorEngineButton = new JButton("Start Automator Engine");
startAutomatorEngineButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
MasterFile master = null;
try {
master = new MasterFile(masterFile, logPath);
} catch (FileNotFoundException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
AutomationLoop theLoop = new AutomationLoop(master);
theLoop.startLoop();
}
});
startAutomatorEngineButton.setBounds(441, 11, 169, 23);
frmAutomatorEngine.getContentPane().add(startAutomatorEngineButton);
//Set up textArea to be used as output stream for program
TextAreaOutputStream outputStream = new TextAreaOutputStream(engineOutput);
PrintStream printStream = new PrintStream(outputStream);
System.setOut(printStream);
//System.setErr(printStream);
}
}