作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
抱歉,伙计们,也许这可能是一个愚蠢的问题,但实际上我找不到任何类似的情况。
这是我的代码:
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/
我是一名优秀的程序员,十分优秀!