我希望我的 pdf chek 方法在后台运行,但我真的不知道如何将我的方法实现到 SwingBackgroupWorker 或线程中...
public class PDFCheck extends JPanel {
private void testAllFontsAreEmbedded(PDFDocument pdf) throws PDFDocumentException {
for (PDFFont font : pdf.listFonts()) {
if (!font.isEmbedded()) {
this.problems.add(new ProblemDescription<PDFDocument>(pdf, "font not embedded: " + font.getName()));
}
}
}
}
非常感谢...
我尝试了这段代码...但它似乎不起作用..
public static class SwingBackgroupWorker extends SwingWorker<Object, Object> {
@Override
protected Object doInBackground() throws Exception {
private void testAllFontsAreEmbedded(PDFDocument pdf) throws PDFDocumentException {
for (PDFFont font : pdf.listFonts()) {
if (!font.isEmbedded()) {
this.problems.add(new ProblemDescription<PDFDocument>(pdf, "font not embedded: " + font.getName()));
}
}
}
}
然后我将使用 new SwingBackgroupWorker().execute();
启动后台工作程序
}
<小时/>
如何运行Backgroundworker来测试它?
public class MoveIcon extends JPanel {
public class MyTask extends SwingWorker<Void, Void> {
@Override
protected Void doInBackground() throws Exception {
int i = 0;
while (i < 10) {
System.out.print(i);
i++;
}
return null;
}
}
public static void main(String[] args) {
new MyTask();
}
}
这行不通:(
我通常为 SwingWorker
创建内部类。因此,您可以将 SwingWorker
放入 PDFCheck
的私有(private)内部类中,并添加您需要在工作人员内部访问的字段(在您的情况下只是 pdf
)。然后您可以通过构造函数设置它们。你可以这样做:
public class PDFCheck extends JPanel {
/* ... */
private class MyTask extends SwingWorker<Void, Void> {
PDFDocument pdf;
MyTask(PDFDocument pdf)
{
this.pdf = pdf;
}
@Override
protected Void doInBackground() throws Exception
{
for (PDFFont font : pdf.listFonts())
{
if (!font.isEmbedded())
{
PDFCheck.this.problems.add(new ProblemDescription<PDFDocument>(pdf, "font not embedded: " + font.getName()));
}
}
}
}
/* ... */
// Call the Swing Worker from outside the class through this method
public void runWorker()
{
MyTask task = new MyTask(pdfFile);
task.execute()
}
}
然后从 PDFCheck
类内部调用它,如下所示:
MyTask task = new MyTask(pdf);
task.execute();
我是一名优秀的程序员,十分优秀!