`

Java进度条在事件处理过程中不更新?(转)

阅读更多
Java进度条在事件处理过程中不更新?(转载)
为什么进度条在事件处理过程中不更新,而是在完成后,从0%调到100%?
分两种情况:
1)在AWT事件线程中执行的操作
当应用程序在事件线程中执行长时间的操作时,会阻塞正常的AWT事件处理,因此阻止了重绘操作的发生。这同常会在下列情况下发生:应用程序响应一个来自用户界面的请求时,在连接到一个按钮或其他GUI组件的事件处理程序中执行任务,任务的内容可能会需要较长时间,使事件线程挂起,直至远程系统发出答复为止。当应用程序调用JProgressBar的setValue方法时,进度条可能更新期内部状态并调用repaint,这样做会把一个事件放置到AWT事件队列中。不幸的是,直至应用程序的事件处理程序完成其处理并把控制权返回到线程的事件处理循环,才能处理该事件。
可以通过调用JComponent的paintImmediately方法来这样做,该方法有两种形式:
public void paintImmediately(int x, int y, int width, int height);
public void paintImmediately(Rectangel rect);
例如:
Dimension d = bar.getSize();
Rectangel rect = new Rectangle(0,0, d.width, d.height);
...
bar.setValue(progressValue);
bar.paintImmediately(rect);
...
2)在另一个线程中执行的操作
如果在一个单独的线程中执行该操作,当调用进度条的setValue方法,它的更新不会出现任何问题,问题在于,后台线程必须调用JProgressBar的setValue。而Swing组件只有在事件线程中才能安全的访问。因此,从执行实际工作的线程调用setValue方法是不安全的!解决的方法是使用SwingUtilites的invokeLater方法,让AWT事件线程稍后进行setValue调用。
例如:
...
SwingUtilities.invokeLater(new Runnable() {
public void run() {
bar.setValue(value);
}
});
...
还有一种可能,不能再线程中改变swing组件,例如,不能从线程调用label.setText,但是可以使用EventQueue类的invokeLater和invokeAndWait方法,以便在事件调度线程中执行该调用程序。(From Core Java)




详见 http://nanjabarwait.blogbus.com/logs/7303217.html
分享到:
评论

相关推荐

    JAVA进度条源代码

    Java进度条是用户界面(UI)设计中常见的一种元素,用于提供给用户关于长时间运行任务的进度反馈。在Java编程中,我们可以使用Java Swing或JavaFX库来创建进度条。以下将详细介绍如何在Java中实现进度条功能,以及...

    java实现进度条.pdf

    * 数据处理进度条:在数据处理过程中,使用JProgressBar可以实时显示当前处理进度,提高用户体验。 Java实现进度条是Java GUI开发中的一部分,使用JProgressBar和事件监听机制,可以实现实时更新的进度条,提高用户...

    Java实现显示进度条

    - 在循环中设置进度条的值,并更新进度条的文本显示。 - 使用`Thread.sleep(100)`模拟耗时操作,使得进度条能够平滑地增加。 6. **构造函数**: ```java public ProgressBar() { JFrame jf = new JFrame(); ...

    Java的命令行进度条 JCmdLineProgess

    在开发命令行应用程序时,这种工具尤其有用,因为它可以帮助用户跟踪后台处理的进度,避免用户在等待过程中感到迷茫或不耐烦。 在Java中实现命令行进度条,通常需要以下几个核心概念: 1. **循环与计数器**:...

    怎样在Java实例开发的过程中使用进度条

    ### 如何在Java实例开发过程中使用进度条 在Java应用开发中,特别是在处理大量数据或进行长时间运行的任务时,向用户展示任务进度是提升用户体验的关键因素之一。本篇将详细介绍如何利用`...

    SuperMap Objects Java 进度条

    总的来说,这个示例程序展示了如何在Java环境中利用SuperMap Objects的iObjects接口,结合多线程和事件处理技术,实现数据导入时的进度条功能,从而提供用户友好的交互体验。这样的技术在GIS应用开发中非常常见,...

    java带进度条的异步上传

    在Java Web开发中,实现一个带进度条的异步上传功能是常见的需求,尤其是在处理大文件上传时,用户界面的反馈至关重要。这个“java带进度条的异步上传”示例利用了Servlet、Ajax以及可能的JavaScript库,如jQuery,...

    JAVA 带进度条的文件拷贝程序

    在Java编程中,创建一个带有进度条的文件拷贝程序是一项实用技能,尤其对于那些希望增强用户界面体验的开发者来说。下面将详细讲解这个“JAVA 带进度条的文件拷贝程序”的核心知识点。 首先,我们需要理解的是,...

    Java 进度条的使用 有暂停 和 继续

    ### Java 进度条的使用:包含暂停与继续功能 在Java编程中,进度条(`JProgressBar`)是Swing...在实际开发过程中,可以根据具体需求对进度条进行更细致的定制,例如更改外观样式、增加动画效果等,以提升用户体验。

    Java 文件上传带进度条源码

    可以计算每个Part的大小,然后在处理过程中记录已读取的字节数。 3. **进度回调**:定义一个回调接口,例如`UploadProgressListener`,它有一个`updateProgress(int percent)`方法。每当文件上传进度发生变化时,...

    java实现进度条

    在Java编程中,进度条是一种常见用户界面组件,它用于可视化地表示某个任务或操作的进度,例如文件上传、下载或计算过程。本教程将基于提供的`TestMyProgressBar.java`和`MyProgressBar.java`文件,讲解如何使用Java...

    java开发页面进度条

    通过Java技术实现页面进度条不仅可以直观地展示页面或数据加载的过程,还能增强应用的人机交互性。本文将详细介绍如何使用Java Swing库来开发一个简单的页面进度条。 #### 二、Java Swing简介 Java Swing是Java...

    带进度条的文件上传下载组件(JAVA)

    在这个组件中,Java被用来编写服务器端的逻辑,处理文件的上传和下载请求,以及进度条状态的更新。 2. **JSP(JavaServer Pages)**:JSP是Java Web开发中的一个重要组成部分,它允许开发者在HTML页面中嵌入Java...

    java图片上传进度条

    在Java编程中,实现图片上传进度条功能是一项常见的需求,特别是在构建Web应用或者移动应用时。这个功能可以提供用户友好的界面,展示文件上传过程,提高用户体验。在本篇文章中,我们将深入探讨如何在Java环境下,...

    java实现大文件上传并有进度条及其代码解析

    在Java开发中,处理大文件上传是一项常见的任务,特别是在Web应用中。为了提供更好的用户体验,通常需要添加进度条功能,让用户了解文件上传的状态。本文将详细介绍如何使用Java实现大文件的上传并展示进度条,同时...

    JAVA实现模拟导入数据/上传文件进度条

    在Java Web开发中,实现一个模拟数据导入或文件上传进度条功能可以极大提升用户体验,让用户在等待过程中心中有数。这个功能通常涉及到前端与后端的交互,涉及到的技术包括Servlet、JSP、jQuery和Ajax。下面我们将...

    Java的命令行进度条 JCmdLineProgess.7z

    6. **处理异常**:如果在任务执行过程中发生错误,确保调用`errorOccured()`方法,这将在进度条上显示错误信息。 通过这个库,开发者不仅可以创建基本的进度条,还可以自定义颜色、字体样式、进度指示器等,以满足...

    java做的简单的进度条

    Java中的进度条是一种可视化元素,通常用于在执行耗时操作时提供用户反馈,让用户知道程序正在运行并估计剩余时间。本教程将深入讲解如何在Java中实现一个简单的进度条,这对初学者来说是一个很好的实践项目。 首先...

    java 进度条文件上传

    在Java编程中,实现文件上传进度条功能是一项常见的需求,特别是在处理大文件或者批量上传时,用户界面的反馈显得尤为重要。进度条不仅提高了用户体验,也能让用户了解任务的执行状态,从而减少用户对程序运行时间的...

    java 进度条上传 源码

    "java 进度条上传 源码"这个主题涉及到一个技术问题,即如何在Java Web应用程序中实现文件上传并同时显示进度条,以提供更好的用户体验。在描述中提到,此源码实例是基于JSP和SWFUpload库来实现这一功能的,同时支持...

Global site tag (gtag.js) - Google Analytics