栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

在运行时在事件调度线程上摇摆验证代码

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

在运行时在事件调度线程上摇摆验证代码

该FEST框架有一个工具来检测摇摆使用关EDT。基本上是您安装的RepaintManager。该框架面向测试,但是可以在部署时使用RepaintManager。

  • 请参阅FEST-Swing的事件调度线程

或者,要检查诸如getter和setter之类的所有方法仅可在EDT上访问,可以使用AspectJ和加载时编织将SwingUtilities.isDisaptchThread()建议添加到swing组件(和JDK
Swing组件)的每个方法上。 )

@Aspectpublic class EDTCheck {    @Pointcut("call (* javax.swing..*+.*(..)) || " +   "call (javax.swing..*+.new(..))")    public void swingMethods() {}    @Pointcut("call (* com.mystuff.swing..*+.*(..)) || " +   "call (com.mystuff.swing..*+.new(..))")    public void mySwingMethods() {}    @Pointcut("call (* javax.swing..*+.add*Listener(..)) || " +   "call (* javax.swing..*+.remove*Listener(..)) || " +   "call (void javax.swing.JComponent+.setText(java.lang.String))")    public void safeMethods() {}    @Before("(swingMethods() || mySwingMethods()) && !safeMethods()")    public void checkCallingThread(JoinPoint.StaticPart thisJoinPointStatic) {        if(!SwingUtilities.isDispatchThread()) { System.out.println(         "Swing single thread rule violation: "          + thisJoinPointStatic); Thread.dumpStack(); // or you might throw an unchecked exception        }    }}

(在文章中稍作修改-
添加了mySwingMethods切入点,并使用SwingUtiliites.isDispatchThread()。实际上,它与EventQueue.isDispatchThread()相同,但是抽象更干净。)

  • 请参阅使用AspectJ检测违反Swing单线程规则的情况


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/570022.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号