【发布时间】:2018-04-25 03:40:05
【问题描述】:
我想在javax.swing.JFrame 仍然存在时退出控制台应用程序。
我有一个显示javax.swing.JFrame 的控制台程序。有时我想将标准输出重定向到文件。
java -cp path com.domain.package > output.log
一个合理的 JFrame 配置值是WindowConstants.DISPOSE_ON_CLOSE,据我了解,当单击关闭 JFrame 时,它会被丢弃,但控制台程序会在 main 的右大括号处阻塞。我不知道它在等什么。那时我必须Control-C 来终止main。
另一个合理的 JFrame 配置值是WindowConstants.EXIT_ON_CLOSE,据我了解,当单击关闭 JFrame 时,不仅 JFrame 关闭,而且还会导致 main 终止。请注意,即使 main 已到达右大括号,它也不会退出,直到单击关闭 JFrame。这种行为比前一种情况要好,因为不需要Control-C 来终止main。
我希望控制台程序终止,这样即使 JFrame 仍然存在,output.log 文件也会被释放。我试图通过让线程中的 Runnable 拥有 JFrame 来做到这一点。那没有用;控制台程序在 JFrame 关闭之前不会终止。
// main program...
static void main(String[] args)
{
PlotWorker worker = new PlotWorker(data);
Thread thread = new Thread(worker);
thread.start();
// do not use thread.join
// simply exit at the closing brace of main
}
// owner of the JFrame...
class PlotWorker implements Runnable
{
JFrame jFrame;
@Override
public void run()
{
jFrame = new JFrame();
jFrame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
}
}
实际上,我知道我可以使用文本编辑器查看 output.log 文件(或者只是 Linux cat 第二个控制台中的文件),即使第一个控制台中的标准输出仍然有一个“句柄” output.log。我更喜欢在 JFrame 仍然存在时退出的干净解决方案。
编辑:这个问题对我来说不再重要。我决定截屏并将 JFrame 图像保存到磁盘,从而无需保持 JFrame 打开,然后继续关闭 JFrame,从而关闭所有文件。
【问题讨论】:
-
尝试使用
javaw(在Windows上) -
很抱歉,仅出于此目的切换到 Windows 是不现实的。
-
好吧,您“可以”将
stdout重定向到应用程序内部的文件,或者您可以探索“分离”该过程,可能类似于java -cp path com.domain.package > output.log &
标签: java swing jframe console-application