我的Java Swing应用程序执行大量HTTP请求,这些请求本质上会冻结屏幕,直到收到并处理响应为止。
我希望在此期间显示等待光标,使用:
frame.setCursor(JFrame.WAIT_CURSOR);
不幸的是,这不起作用,因为它正在UI线程上执行,它将继续处理我的HTTP请求。
我知道我应该在一个单独的Swing Worker Thread上执行冗长的任务,但是,为了保持我的代码简单(因为在某些情况下我的HTTP请求可以被中断以显示需要在UI线程),我正在寻找一种“强制”摆动的解决方案来在执行未来代码之前更新鼠标光标。
有没有办法实现这个目标?
答案 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(...)
来创建和显示对话框。