首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >java GUI几秒钟无响应

java GUI几秒钟无响应
EN

Stack Overflow用户
提问于 2011-04-26 09:26:53
回答 3查看 234关注 0票数 2

我们有一个java客户端/服务器应用程序,其中GUI有规律地(每半小时)变得平均2到10秒无响应。点击不同的按钮只有在挂起几秒钟后才会生效。

我最初以为是GC问题,但调查证明这一端没有问题。

我更确信这是一个线程问题,图形化线程有时会阻塞。

我如何检查图形线程的状态,以在我的日志中见证它的“无响应”?我想我可以从不同的线程每秒检查一次它的状态,但是怎么做呢?轮询哪个变量?

关于如何解决这个问题,还有其他的想法吗?

谢谢

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-04-26 09:30:59

您可以向Java进程发出kill -QUIT (在Windows上也是类似的命令),这将导致所有线程将它们的堆栈跟踪转储到STDOUT,这样您就可以看到发生了什么。这也显示了哪些线程正在持有锁(同步块),哪些线程正在等待。

票数 5
EN

Stack Overflow用户

发布于 2011-04-26 09:57:16

如果您不能在测试中重现问题,也不能关闭生产,那么您的问题就没有简单的答案。

看起来您可能有更大的问题,必须使用某种分析工具进行诊断。我们用的是JProbe & JProfiler,用起来很幸运。

最坏的情况是,您可以使用JMX编写您自己的代码,这些代码按照此链接的思路执行某些操作。在过去,它对我非常有用。

http://www.javamex.com/tutorials/profiling/profiling_java5_threads_methodology.shtml

票数 2
EN

Stack Overflow用户

发布于 2011-04-26 10:31:18

要了解UI线程被阻塞的时间有多长,可以这样做,

代码语言:javascript
运行
复制
ScheduledThreadPoolExecutor executor = ....
executor.scheduleAtFixedRate(new Runnable(){ 
   public void run() {testEventThread();}}, 5, 5, TimeUnit.SECONDS);

void testEventThread() {
   final long now = System.currentTimeMillis();
   SwingUtilities.invokeLater(new Runnable() {
       public void run() {
             System.out.println("event thread took:" + (System.currentTimeMillis()- now) + " to respond");
       }
   });

}

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5784990

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档