gpt4 book ai didi

java - 为什么 jTextArea.setText() 方法在它应该之后才起作用?

转载 作者:行者123 更新时间:2023-12-01 13:01:36 25 4
gpt4 key购买 nike

抱歉,伙计们,也许这可能是一个愚蠢的问题,但实际上我找不到任何类似的情况。

这是我的代码:

private void startHashingButtonActionPerformed(java.awt.event.ActionEvent evt) {                                                   

consoleArea.setText( myFile.getName() + " started to be hashing! It can take few minutes, please wait.."); //20:05

try {
BufferedReader reader = new BufferedReader(new FileReader(myFile));
myHash = new HashOA(300000);
try {
while(reader.readLine() != null){
myHash.hash(reader.readLine());
}

consoleArea.append("\n" + myFile.getName() + " is successfully hashed!!");

} catch (IOException ex) {
Logger.getLogger(MainScreen.class.getName()).log(Level.SEVERE, null, ex);
}
} catch (FileNotFoundException ex) {
Logger.getLogger(MainScreen.class.getName()).log(Level.SEVERE, null, ex);
}

}

我希望在 consoleArea(TextArea) 中应该有“file.txt 开始进行哈希处理!可能需要几分钟,请稍候..”写入,然后进行哈希处理(while(reader.readLine()) != null) 循环) 应该启动。但是当我运行程序并单击“startHashingButton”时,它首先完成散列过程,然后在控制台(jTextArea)上写入 ->“file.txt 开始散列!可能需要几分钟,请稍等..”, “file.txt 已成功散列!!”

我正在处理一个大型文本文件,需要一段时间才能对其进行哈希处理。这就是为什么我想告诉用户他/她应该稍等一下。

为什么工作队列与我的代码顺序不同?

注意:我唯一想到的就是使用线程,它能解决问题吗?

最佳答案

Note: The only thing that came to my mind is to use thread, could it solve the problem?

是的,这是正确的。在事件监听器中执行的代码在事件调度线程上调用。在所有代码执行完毕之前,无法重新绘制 GUI。因此,长时间运行的任务会阻止 GUI 重新绘制自身。

阅读 Swing 教程中关于 Concurrency in Swing 的部分了解更多信息。也许 SwingWorker 将是比创建自己的线程更好的解决方案。

关于java - 为什么 jTextArea.setText() 方法在它应该之后才起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23478387/

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