gpt4 book ai didi

java - 在循环内设置文本

转载 作者:行者123 更新时间:2023-11-30 03:17:16 28 4
gpt4 key购买 nike

我正在构建一个电子邮件客户端,但遇到了一些问题,我想在 jTextArea 中“附加”“已发送 + 电子邮件”,一切都很好并且代码正在运行。但是,它只会在 for 循环完成后删除“已发送 + 电子邮件”..

代码:

    for (int i = 0; i < to.length; i++) {
int count = i;

if (!emailValidator.validate(to[i].toString().trim())) {
System.out.print("Invalid Email ID++");
jTextAreaStatus.append("Invalid Email:\t" + to[i] + "\n");
jLabelFail.setText("| F: " + String.valueOf(i + 1));
} else {

new SendMail().StartSend(smtpHostName, smtpUserName, smtpPassword, fromEmail, fromName,
to[i], body, subject, smtpPort, smtpSSL, smtpAuth);

// show the sending count
jTextAreaStatus.append("Sent:\t" + to[i] + "\n");
jLabelCount.setText("S: " + (i + 1) + " / " + String.valueOf(to.length));

if (isCanceled) {
break;
}

}
}

我做错了什么?

谢谢!

PS:我正在使用 swing 作为 gui。

最佳答案

如果此循环在主线程上运行,则只有在该过程完成后才会刷新 UI。如果将此进程放入单独的线程中,则 UI 应在此进程中刷新。否则,应该有一个在循环的每次迭代期间可以调用的过程中刷新 UI 的命令。

[更新]为了回答您的评论,这是如何在 java 中启动线程:

public static void main(String[] args) {
Thread thead = new Thread(new myRunner());
thread.start();
}



public class myRunner implements Runnable {

@Override
public void run() {
// Do this in the background -- your for loop goes here
}

}

在此示例中,我将启动一个新线程并在后台运行它。 Thread 接受 Runnable 类的实现,并在后台执行 run 方法。

一旦线程启动,您的 main 方法将继续执行。如果您想等待线程完成后再继续,可以在 thread.start(); 之后使用 thread.join(); ,调用线程将在此等待线程在继续之前完成的点。

如果您想了解有关线程的更多信息,我建议您查看 http://docs.oracle.com/javase/tutorial/essential/concurrency/

使用线程时要小心,线程可能会产生更多值得的问题,因为您需要开始使应用程序线程安全:http://docs.oracle.com/javase/tutorial/essential/concurrency/

祝你好运!

关于java - 在循环内设置文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32271457/

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