gpt4 book ai didi

java - 如何让一个方法在后台持续运行?

转载 作者:太空宇宙 更新时间:2023-11-04 06:24:50 26 4
gpt4 key购买 nike

我希望我的 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();

关于java - 如何让一个方法在后台持续运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26929132/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com