gpt4 book ai didi

java - 如何重建线程方法

转载 作者:行者123 更新时间:2023-12-01 12:08:56 24 4
gpt4 key购买 nike

如何重建我的方法:

public class PDFCheck {
public static void testAllFontsAreEmbedded(PDFDocument pdf) throws PDFDocumentException {

for (PDFFont font : pdf.listFonts()) {

if (!font.isEmbedded()) {
errorMessageBuffer.append("font not embedded: " + font.getName() + "\n");
fontError = "font error";
}
}

进入像这样的线程:?

public class Task1 implements Runnable {
public void run() {
while (!Thread.currentThread().isInterrupted()) {
................
................
................
................
}
}
}

主要我会这样做:

Thread t1 = new Thread(new Task1());
t1.start();
t1.interrupt();

我想这样做,因为我开发了一个 pdf 检查工具,当 pdf 太大并且检查时间太长时,停止按钮应该停止“字体检查”(参见上面的代码片段)。

我尝试构建一个构造函数,但构造函数显示了很多错误消息:

public void run() {
while (!Thread.currentThread().isInterrupted()) {

public static void testAllFontsAreEmbedded(PDFDocument pdf) throws PDFDocumentException {

for (PDFFont font : pdf.listFonts()) {

if (!font.isEmbedded()) {
fontError = "font error" + " | ";
} else {
fontError = "";
}
}
System.out.println("läuft");
}
}
}

更新:我最终在这个方法中集成了一个线程。现在的问题是,该方法始终选择路径的第一个 pdf 文件...我的 while 语句位置错误吗?

new Thread() {
@Override
public void run() {
String directory;
directory = "C:\\Users\\Tommy\\Desktop\\pdf";
File inputFiles = new File(directory);
CopyOfSettingsGui.this.running = true;
for (File file : inputFiles.listFiles()) {
if (file.isFile()) {

if (file.getName().endsWith((".pdf"))) {
while (CopyOfSettingsGui.this.running) {

try {
Thread.sleep(100);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

System.out.print(file.getName() + "\n");

}
return;
}
}
}
}
}.start();

最佳答案

您可以按照Conffusion的答案中所述传递pdf,但是如果您想使用interrupt(),您必须使您的线程“可中断”此方法不会停止线程,除非您的线程正在调用抛出“中断异常”或检查“中断标志”的方法。因此,您必须在每次迭代中调用“Thread.interrupted()”。

public void run() {
for (PDFFont font : pdf.listFonts()) {
if (Thread.interrupted()){
return;
}
...
}
}

或者,您可以设置一个成员变量来停止线程:

class PDFCheckThread extends Thread {

private boolean stop;

public PDFCheckThread(PDFDocument pdf) {
this.pdf = pdf;
}

public void setStopFlag() {
stop = true;
}

public void run() {
for (PDFFont font : pdf.listFonts()) {
if(stop) {
return;
}
...
}
}
}

关于java - 如何重建线程方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27381732/

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