我写了一个GUI程序,当程序运行(写文件)时,关闭按钮不起作用,所以我不能在它运行时停止它。谁知道为什么?我可以阻止它(当它正在写文件时)吗?
答案 0 :(得分:3)
没有进一步的证据,我猜你是在事件调度线程的上下文中写出你的文件。
这非常非常糟糕。 EDT负责(除其他事项外)处理发生的所有UI事件,包括关闭窗口的请求。但是如果你用耗时的任务(比如I / O,循环,Thread#sleep
或任何其他阻塞操作)来阻止这个线程,那么EDT就无法处理在队列中累积的任何事件。
在这种情况下,最好的办法是使用SwingWorker
将文件写入另一个线程。查看Concurrency in Swing了解更多信息