package swing.progress; import java.awt.BorderLayout; import java.awt.Container; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.lang.reflect.InvocationTargetException; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JProgressBar; import javax.swing.SwingUtilities; public class ProgressSample { static class BarThread extends Thread { private static int DELAY = 500; JProgressBar progressBar; public BarThread(JProgressBar bar) { progressBar = bar; } public void run() { int minimum = progressBar.getMinimum(); int maximum = progressBar.getMaximum(); Runnable runner = new Runnable() { public void run() { int value = progressBar.getValue(); progressBar.setValue(value + 1); } }; for (int i = minimum; i < maximum; i++) { try { SwingUtilities.invokeAndWait(runner); // Our task for each step is to just sleep Thread.sleep(DELAY); } catch (InterruptedException ignoredException) { } catch (InvocationTargetException ignoredException) { } } } } public static void main(String args[]) { // Initialize final JProgressBar aJProgressBar = new JProgressBar(0, 100); final JButton aJButton = new JButton("Start"); ActionListener actionListener = new ActionListener() { public void actionPerformed(ActionEvent e) { aJButton.setEnabled(false); Thread stepper = new BarThread(aJProgressBar); stepper.start(); whileThread wt = new whileThread(); wt.start(); // try // { // wt.join(); // } catch (InterruptedException e1) // { // // TODO 自动生成 catch 块 // e1.printStackTrace(); // } } }; aJButton.addActionListener(actionListener); JFrame theFrame = new JFrame("Progress Bars"); theFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); Container contentPane = theFrame.getContentPane(); contentPane.add(aJProgressBar, BorderLayout.NORTH); contentPane.add(aJButton, BorderLayout.SOUTH); theFrame.setLocation(500, 200); theFrame.setSize(300, 100); theFrame.show(); } } class whileThread extends Thread { public void run() { int i =0; while(i < 1000000) { System.out.println(i++); } SwingUtilities.invokeLater(new Runnable() { public void run() { JFrame newFrame = new JFrame("&&&&&&&&&&&&&&&&&&&&&&"); newFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); newFrame.setLocation(500, 400); newFrame.setSize(300, 100); newFrame.show(); } }); } }
try { wt.join(); } catch (InterruptedException e1) { // TODO 自动生成 catch 块 e1.printStackTrace(); }
您还没有登录,请您登录后再发表评论
Swing线程是单线程的,意味着在同一时间只能执行一个事件响应或更新操作。如果在Swing线程中执行时间-consuming的操作,将会导致GUI界面freeze或卡顿。 SwingWorker基础知识 SwingWorker是一个抽象类,用于在Swing...
- **方法二:使用`SwingWorker`类** - Swing提供了一个`SwingWorker`类,它允许在后台线程执行计算,同时提供在EDT中更新界面的能力,通过`doInBackground`方法执行后台任务,`process`和`done`方法则在EDT中运行,...
在 Swing 中,线程安全是一个非常重要的问题。Swing 组件是线程不安全的,这意味着只能从事件派发线程(Event Dispatch Thread,简称 EDT)访问将要在屏幕上绘制的 Swing 组件。如果从其他线程访问 Swing 组件,将会...
Swing框架遵循单线程规则,即所有UI组件在同一时间只能被一个线程访问,通常这个线程就是事件派发线程。这一规则是为了避免多线程环境下的竞态条件和同步问题,确保组件的线程安全性。然而,这也会限制我们在执行...
3. 发送和接收消息:多线程模型下,一个线程负责监听服务器的新消息,另一线程则负责将用户输入的消息发送到服务器。 4. 消息显示:接收到的消息应实时显示在聊天窗口中,更新界面需在EDT上进行。 5. 聊天记录:可以...
3. `DownloadTask.java`:代表单个下载任务,每个任务对应一个线程。 4. `DownloadPanel.java`:展示下载列表和进度条的Swing组件。 5. `Config.java`:可能存储用户配置,如下载目录和默认设置。 总的来说,Java ...
Java Swing 是Java GUI(图形用户界面)开发的一个重要库,它是Java AWT(Abstract Window Toolkit)的扩展,提供了更丰富的组件和更强大的功能。在Java Swing中创建动态、交互式的应用,线程管理是一个关键的概念。...
在 Swing 中,所有的 GUI 组件都是在一个单独的线程中执行的,这个线程被称为 Event Dispatch Thread(EDT)。EDT 负责处理所有的 GUI 事件,例如鼠标点击、键盘输入等。开发者可以使用 Swing 组件来创建用户界面,...
然而,在利用Swing进行开发时,线程安全性是一个非常关键的问题,因为Swing组件默认不是线程安全的。 #### Swing的线程安全问题 Swing组件和大多数Swing方法并不是线程安全的,这意味着它们只能在事件分发线程...
Swing API设计为单线程模型,这意味着所有对Swing组件的修改和操作必须在同一个线程中完成,即Swing线程(AWT事件分派线程)。这种设计旨在减少线程同步的复杂性,但同时也引入了挑战,因为不当的线程使用可能导致...
这是因为 Swing 不是线程安全的,如果多个线程同时修改组件状态,可能会引发不可预测的问题。 2. **SwingWorker**: Java 5 引入了 `javax.swing.SwingWorker` 类,它为在后台线程执行计算任务提供了便利。...
在这个“swing 线程 实现奖项抽取”的项目中,开发者利用Swing来创建一个交互式的抽奖应用,用户可以通过点击按钮触发抽奖过程。这个过程涉及到了多线程的概念,以确保界面的流畅性和数据处理的并发性。 首先,...
Swing的单线程模型基于"事件派发线程"(Event Dispatch Thread, EDT),所有Swing组件的渲染和事件处理都在这个线程中进行。这是因为GUI组件通常不支持线程安全的操作,多线程环境下可能会导致组件状态的不一致,...
这个线程负责读取程序参数,初始化对象,并启动GUI。在Swing程序中,初始化线程的主要任务是创建和展示GUI。 2. **UI事件调度线程 (EDT, Event Dispatch Thread)**:EDT是Swing程序的核心,它负责处理所有的GUI更新...
在“JAVASWING多线程产生随机球”的项目中,开发者利用Swing创建了一个互动的应用程序,用户可以通过鼠标点击在界面上生成一个球体,这个球体会以随机的方向和速度在窗口内移动。下面将详细解释这个项目涉及的知识点...
所有的Swing组件修改和渲染都应该在这个线程中进行。 `SwingUtilities.invokeLater`方法的使用方式如下: ```java SwingUtilities.invokeLater(new Runnable() { public void run() { // 在这里执行需要在EDT上...
解决这个问题的方法是单独启动一个线程进行运算和查询工作,并随时更新图形界面。 但是,这时候,另一个问题就出现了,那就是可能不仅没有解决原来偶尔死机问题,还可能导致程序彻底死掉。幸运的是,在JDK中暗藏了...
这个线程负责读取程序参数,初始化对象,尤其是在Swing应用中,主要任务是启动GUI。一旦GUI启动,初始化线程的工作通常就完成了。 2. UI事件调度线程(EDT): EDT是Swing的核心,它负责所有与GUI组件交互的任务,...
创建一个线程持续监听Socket的输入流,以便接收服务器发送的消息。同时,有一个用户界面线程,负责显示聊天窗口,接收用户输入并将其通过Socket发送到服务器。 3. **通信协议**:为了保证数据的正确传输,通常会...
相关推荐
Swing线程是单线程的,意味着在同一时间只能执行一个事件响应或更新操作。如果在Swing线程中执行时间-consuming的操作,将会导致GUI界面freeze或卡顿。 SwingWorker基础知识 SwingWorker是一个抽象类,用于在Swing...
- **方法二:使用`SwingWorker`类** - Swing提供了一个`SwingWorker`类,它允许在后台线程执行计算,同时提供在EDT中更新界面的能力,通过`doInBackground`方法执行后台任务,`process`和`done`方法则在EDT中运行,...
在 Swing 中,线程安全是一个非常重要的问题。Swing 组件是线程不安全的,这意味着只能从事件派发线程(Event Dispatch Thread,简称 EDT)访问将要在屏幕上绘制的 Swing 组件。如果从其他线程访问 Swing 组件,将会...
Swing框架遵循单线程规则,即所有UI组件在同一时间只能被一个线程访问,通常这个线程就是事件派发线程。这一规则是为了避免多线程环境下的竞态条件和同步问题,确保组件的线程安全性。然而,这也会限制我们在执行...
3. 发送和接收消息:多线程模型下,一个线程负责监听服务器的新消息,另一线程则负责将用户输入的消息发送到服务器。 4. 消息显示:接收到的消息应实时显示在聊天窗口中,更新界面需在EDT上进行。 5. 聊天记录:可以...
3. `DownloadTask.java`:代表单个下载任务,每个任务对应一个线程。 4. `DownloadPanel.java`:展示下载列表和进度条的Swing组件。 5. `Config.java`:可能存储用户配置,如下载目录和默认设置。 总的来说,Java ...
Java Swing 是Java GUI(图形用户界面)开发的一个重要库,它是Java AWT(Abstract Window Toolkit)的扩展,提供了更丰富的组件和更强大的功能。在Java Swing中创建动态、交互式的应用,线程管理是一个关键的概念。...
在 Swing 中,所有的 GUI 组件都是在一个单独的线程中执行的,这个线程被称为 Event Dispatch Thread(EDT)。EDT 负责处理所有的 GUI 事件,例如鼠标点击、键盘输入等。开发者可以使用 Swing 组件来创建用户界面,...
然而,在利用Swing进行开发时,线程安全性是一个非常关键的问题,因为Swing组件默认不是线程安全的。 #### Swing的线程安全问题 Swing组件和大多数Swing方法并不是线程安全的,这意味着它们只能在事件分发线程...
Swing API设计为单线程模型,这意味着所有对Swing组件的修改和操作必须在同一个线程中完成,即Swing线程(AWT事件分派线程)。这种设计旨在减少线程同步的复杂性,但同时也引入了挑战,因为不当的线程使用可能导致...
这是因为 Swing 不是线程安全的,如果多个线程同时修改组件状态,可能会引发不可预测的问题。 2. **SwingWorker**: Java 5 引入了 `javax.swing.SwingWorker` 类,它为在后台线程执行计算任务提供了便利。...
在这个“swing 线程 实现奖项抽取”的项目中,开发者利用Swing来创建一个交互式的抽奖应用,用户可以通过点击按钮触发抽奖过程。这个过程涉及到了多线程的概念,以确保界面的流畅性和数据处理的并发性。 首先,...
Swing的单线程模型基于"事件派发线程"(Event Dispatch Thread, EDT),所有Swing组件的渲染和事件处理都在这个线程中进行。这是因为GUI组件通常不支持线程安全的操作,多线程环境下可能会导致组件状态的不一致,...
这个线程负责读取程序参数,初始化对象,并启动GUI。在Swing程序中,初始化线程的主要任务是创建和展示GUI。 2. **UI事件调度线程 (EDT, Event Dispatch Thread)**:EDT是Swing程序的核心,它负责处理所有的GUI更新...
在“JAVASWING多线程产生随机球”的项目中,开发者利用Swing创建了一个互动的应用程序,用户可以通过鼠标点击在界面上生成一个球体,这个球体会以随机的方向和速度在窗口内移动。下面将详细解释这个项目涉及的知识点...
所有的Swing组件修改和渲染都应该在这个线程中进行。 `SwingUtilities.invokeLater`方法的使用方式如下: ```java SwingUtilities.invokeLater(new Runnable() { public void run() { // 在这里执行需要在EDT上...
解决这个问题的方法是单独启动一个线程进行运算和查询工作,并随时更新图形界面。 但是,这时候,另一个问题就出现了,那就是可能不仅没有解决原来偶尔死机问题,还可能导致程序彻底死掉。幸运的是,在JDK中暗藏了...
这个线程负责读取程序参数,初始化对象,尤其是在Swing应用中,主要任务是启动GUI。一旦GUI启动,初始化线程的工作通常就完成了。 2. UI事件调度线程(EDT): EDT是Swing的核心,它负责所有与GUI组件交互的任务,...
创建一个线程持续监听Socket的输入流,以便接收服务器发送的消息。同时,有一个用户界面线程,负责显示聊天窗口,接收用户输入并将其通过Socket发送到服务器。 3. **通信协议**:为了保证数据的正确传输,通常会...