Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/336.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java事件队列事件分派刷新/陷阱事件_Java_Events_Swing_Dispatch - Fatal编程技术网

java事件队列事件分派刷新/陷阱事件

java事件队列事件分派刷新/陷阱事件,java,events,swing,dispatch,Java,Events,Swing,Dispatch,我有一个与设计相关的问题,我正试图找到答案 下面是一个场景 假设由于用户的输入(例如,从某个数据库加载大量数据、读取大型文件),您想做一些昂贵(耗时)的事情。强烈建议的方法是在单独的线程中执行耗时的工作,并且永远不要阻止EDT,否则GUI将变得无响应 但是,在某些情况下,除非后台任务完成,否则不应向GUI提供输入。在我的特定情况下,只有在后台工作完成后,我才能确定哪些GUI元素应该可见并启用/禁用。只有那些应该可见并启用的GUI元素应该响应用户输入,否则在我的特定情况下,行为可能是不可预测的 这

我有一个与设计相关的问题,我正试图找到答案

下面是一个场景

假设由于用户的输入(例如,从某个数据库加载大量数据、读取大型文件),您想做一些昂贵(耗时)的事情。强烈建议的方法是在单独的线程中执行耗时的工作,并且永远不要阻止EDT,否则GUI将变得无响应

但是,在某些情况下,除非后台任务完成,否则不应向GUI提供输入。在我的特定情况下,只有在后台工作完成后,我才能确定哪些GUI元素应该可见并启用/禁用。只有那些应该可见并启用的GUI元素应该响应用户输入,否则在我的特定情况下,行为可能是不可预测的

这就是我在处理这种情况时所做的

步骤1:在我准备开始耗时的操作之前

  • 将光标更改为忙碌光标
  • 将鼠标侦听器添加到组件顶层框架的玻璃窗格中
  • 使玻璃窗格可见,以便它可以接收鼠标事件。由于鼠标输入,glasspane不会执行任何操作
  • 步骤2:在后台线程中执行耗时的操作。后台线程有一个finally块,在作业完成(由于错误而完成或中止)时通知事件线程

    步骤3:

  • 将鼠标光标切换回正常状态
  • 从玻璃窗格中删除侦听器
  • 使玻璃窗格不可见,以便鼠标事件转到其预期的收件人
  • 这是处理这种情况的正确方法吗

    你们推荐什么?

    可用于此上下文。在
    done()
    中启动并重新启用后台任务时,可以禁用相关控件。在这种情况下,
    run
    按钮可在“run”和“Cancel”之间切换


    附录:提供了Java 1.5的后端口。

    感谢您的回复。我正在探索SwingWorker。它在JDK1.5中不可用,因此我将尝试使用替代的SwingWorker实现。我已经链接到上面的一个后端口。SwingWorker将完成这项工作。但是,我必须修改我现有的代码以使其工作。