Java Swing强制在UI线程上更改光标外观

时间:2014-09-06 20:40:22

标签: java swing

我的Java Swing应用程序执行大量HTTP请求,这些请求本质上会冻结屏幕,直到收到并处理响应为止。

我希望在此期间显示等待光标,使用:

frame.setCursor(JFrame.WAIT_CURSOR);

不幸的是,这不起作用,因为它正在UI线程上执行,它将继续处理我的HTTP请求。

我知道我应该在一个单独的Swing Worker Thread上执行冗长的任务,但是,为了保持我的代码简单(因为在某些情况下我的HTTP请求可以被中断以显示需要在UI线程),我正在寻找一种“强制”摆动的解决方案来在执行未来代码之前更新鼠标光标。

有没有办法实现这个目标?

2 个答案:

答案 0 :(得分:1)

  
    

我的Java Swing应用程序执行大量HTTP请求,这些请求本质上会冻结屏幕,直到收到并处理响应为止。

  

即可。不是天生的!
仅在EDT(事件 - 调度 - 线程)中执行长操作(如HTTP请求)时 尝试使用SwingWorker。

您可以在此处查看:https://stackoverflow.com/a/782309/3887073

编辑:
强制设置自定义光标(在进行长时间操作之前),您可以尝试使用:

SwingUtilities.invokeLater(new Runnable()
         {
             public void run() 
             {
                 /*change cursor code here*/
             }
         });

但这可能没有用。 (我没试过)
无论如何,绝对建议使用SwingWorker。

答案 1 :(得分:1)

  

我知道我应该在一个单独的Swing Worker Thread上执行冗长的任务,

那就是你应该做的事情。

  

但是,为了保持我的代码简单(因为在某些情况下我的HTTP请求可以被中断以显示对话框

然后"中断代码"应该使用SwingUtitlities.invokeLater(...)来创建和显示对话框。