打印Java中是否有一个打印功能不阻塞UI?
在我的Java应用程序中,有一个打印功能
PrinterJob pj = PrinterJob.getPrinterJob();
pj.setJobName(myJobName);
pj.setPrintable(myPrintableObject);
if ( pj.printDialog() == false ) {
return;
}
pj.print();
虽然打印作业尚未完成,但我无法在UI中单击其他内容,因为打印作业被阻塞
这同样适用于JTextPane的打印功能:
JTextPane jtp = new JTextPane();
...
jtp.print(null, null, show, null, null, show);
有没有可能在不阻塞UI的情况下用Java打印,或者我必须通过多个线程来实现这一点
# 1 楼答案
您的问题是,您正在从主事件调度器线程调用这些方法。该线程的存在是为了服务于你的用户界面——它不应该用于任何长期活动。因为当你占据这个线程时,它就不能再处理事件了,你的用户界面就会冻结
你应该把它们包装成自己的线程。或者使用类似SwingWorker的东西