我有一个swing应用程序,它存储一个对象列表.当用户点击按钮时
我想对列表中的每个对象执行两个操作,然后一旦完成,将结果绘制在JPanel中.我一直在尝试使用SwingWorker,Callable和Runnable进行处理,但无论我做什么,在处理列表时(可能需要几分钟,因为它是IO绑定的),GUI被锁定.
我有一种感觉,这可能是我调用线程或其他东西的方式,还是可能与图形函数有关?这不是线程,因为它非常快.
我必须按顺序完成两个处理阶段,那么确保第二个阶段在第一个阶段等待的最佳方法是什么?我已经使用了join(),然后
while(x.isAlive())
{
Thread.sleep(1000);
}
Run Code Online (Sandbox Code Playgroud)
尝试确保这一点,但我担心这也可能是我的问题的原因.
我一直在寻找一些指针,但由于我找不到任何东西,我确信我在这里做了些蠢事.
我第一次使用Swing来创建一个简单的GUI.它包含一个JFrame我放置了一个单独的JButton,当点击它时,调用一些其他代码,大约需要.3秒钟返回.
就在调用此代码之前actionPerformed(),我想更新按钮上的文本以通知用户正在进行处理.我的问题是,直到3秒钟的呼叫返回后,按钮上的文字才会更新.我希望在通话过程中出现更新的文本,然后我会将其更改回来.
当我点击按钮时,调用repaint()on JButton不会执行任何操作并在JFrame结果中调用它Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException.
我正在研究一个Swing应用程序(目前运行在Java 1.6更新11上),它有一些间歇性的绘制刷新问题(例如有工件等).这只发生在我们应用程序的某些用户而不是其他用户.
之后做一些研究,我发现,设置属性sun.java2d.d3d,以false可以帮助而事实上,它帮助我们的用户之一.
现在其他一些用户正在抱怨这个问题,我正在考虑false为所有用户设置属性.
我的基本问题如下:
究竟是什么原因造成的?是视频卡吗?是司机吗?这是Sun的错误吗?(例如http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6635462)三者的组合?
换句话说,最好是简单地关闭此属性,还是仅影响某些更新到最新驱动程序的视频卡?