AspectJ EDT-Checker 代码问题

2024-03-04

我目前正在使用 Alexander Potochkin 的 AspectJEDT 检查器代码 http://weblogs.java.net/blog/alexfromsun/archive/2006/02/debugging_swing.html(相关代码在帖子底部)。

这段代码(根据我对 AspectJ 的了解)抱怨任何未在 Swing EDT 中发生的 JComponent 方法调用或构造函数调用。

但是,以下仅抱怨 JList 构造函数,而不是 JFrame 构造函数。谁能告诉我为什么?谢谢!

package testEDT;

import javax.swing.DefaultListModel;
import javax.swing.JFrame;
import javax.swing.JList;

public class TestEDT{

    JList list;
    final JFrame frame;

    public TestEDT() {
        DefaultListModel dlm = new DefaultListModel();
        list = new JList(dlm);
        frame = new JFrame("TestEDT");
    }

    public static void main(String args[]) {
        TestEDT t = new TestEDT();
        t.frame.setVisible(true);
    }
}

Alexander Potochkin 的 AspectJ 代码:

package testEDT;

import javax.swing.*;

/**
 * AspectJ code that checks for Swing component methods being executed OUTSIDE the Event-Dispatch-Thread.
 * 
 * (For info on why this is bad, see: http://java.sun.com/products/jfc/tsc/articles/threads/threads1.html)
 * 
 * From Alexander Potochkin's blog post here:
 * http://weblogs.java.net/blog/alexfromsun/archive/2006/02/debugging_swing.html
 * 
 */
aspect EdtRuleChecker{
    /** Flag for use */
    private boolean isStressChecking = true;

    /** defines any Swing method */
    public pointcut anySwingMethods(JComponent c):
         target(c) && call(* *(..));

    /** defines thread-safe methods */
    public pointcut threadSafeMethods():         
         call(* repaint(..)) || 
         call(* revalidate()) ||
         call(* invalidate()) ||
         call(* getListeners(..)) ||
         call(* add*Listener(..)) ||
         call(* remove*Listener(..));

    /** calls of any JComponent method, including subclasses */
    before(JComponent c): anySwingMethods(c) && 
                          !threadSafeMethods() &&
                          !within(EdtRuleChecker) {
        if ( !SwingUtilities.isEventDispatchThread() && (isStressChecking || c.isShowing())) {
            System.err.println(thisJoinPoint.getSourceLocation());
            System.err.println(thisJoinPoint.getSignature());
            System.err.println();
        }
    }

    /** calls of any JComponent constructor, including subclasses */
    before(): call(JComponent+.new(..)) {
        if (isStressChecking && !SwingUtilities.isEventDispatchThread()) {
            System.err.println(thisJoinPoint.getSourceLocation());
            System.err.println(thisJoinPoint.getSignature() + " *constructor*");
            System.err.println();
        }
    }
}

JFrame不是 的子类JComponent, but JList is.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

AspectJ EDT-Checker 代码问题 的相关文章

  • java.lang.ClassNotFoundException:javax.mail.MessagingException

    我想使用 eclipse 将电子邮件从我的 gmail 帐户发送到另一个邮件帐户 我使用 apache tomcat 7 0 34 作为我的 Web 服务器 并使用端口 8080 作为 apache 服务器 HTTP 1 1 并使用 JRE
  • 如何在 JavaFX 中连接可观察列表?

    我所说的串联是指获得一个新列表 该列表侦听所有串联部分的更改 方法的目的是什么FXCollections concat ObservableList
  • 垃圾收集器如何在幕后工作来收集死对象?

    我正在阅读有关垃圾收集的内容 众所周知 垃圾收集会收集死亡对象并回收内存 我的问题是 Collector 如何知道任何对象已死亡 它使用什么数据结构来跟踪活动对象 我正在研究这个问题 我发现GC实际上会跟踪活动对象 并标记它们 每个未标记的
  • 与 Eclipse 中的 Java Content Assist 交互

    作为我的插件项目的一部分 我正在考虑与 Eclipse 在 Java 文件上显示的内容辅助列表进行交互 我正在尝试根据一些外部数据对列表进行重新排序 我看过一些有关创建新内容辅助的教程 但没有看到有关更改现有内容辅助的教程 这可能吗 如果是
  • Android中如何使用JNI获取设备ID?

    我想从 c 获取 IMEIJNI 我使用下面的代码 但是遇到了未能获取的错误cls 它总是返回NULL 我检查了环境和上下文 它们都没有问题 为什么我不能得到Context班级 我在网上搜索了一下 有人说我们应该使用java lang Ob
  • Mockito 使用 @Mock 时将 Null 值注入到 Spring bean 中?

    由于我是 Spring Test MVC 的新手 我不明白这个问题 我从以下代码中获取了http markchensblog blogspot in search label Spring http markchensblog blogsp
  • Java Applet 中的 Apache FOP - 未找到数据的 ImagePreloader

    我正在研究成熟商业产品中的一个问题 简而言之 我们使用 Apache POI 库的一部分来读取 Word DOC 或 DOCX 文件 并将其转换为 XSL FO 以便我们可以进行标记替换 然后 我们使用嵌入到 Java 程序中的 FOP 将
  • 如何使用 JMagick 转换色彩空间?

    如何使用 JMagick API 转换色彩空间 例如 CMYK gt RGB 和 RGB gt CMYK None
  • Java继承,扩展类如何影响实际类

    我正在查看 Sun 认证学习指南 其中有一段描述了最终修饰符 它说 如果程序员可以自由地扩展我们所知的 String 类文明 它可能会崩溃 他什么意思 如果可以扩展 String 类 我是否不会有一个名为 MyString 的类继承所有 S
  • 如何在JPanel中设置背景图片

    你好 我使用 JPanel 作为我的框架的容器 然后我真的想在我的面板中使用背景图片 我真的需要帮助 这是我到目前为止的代码 这是更新 请检查这里是我的代码 import java awt import javax swing import
  • 使用 Elastic Beanstalk 进行 Logback

    我在使用 Elastic Beanstalk 记录应用程序日志时遇到问题 我正在 AWS Elastic Beanstalk 上的 Tomcat 8 5 with Corretto 11 running on 64bit Amazon Li
  • Java Swing - 如何禁用 JPanel?

    我有一些JComponents on a JPanel我想在按下 开始 按钮时禁用所有这些组件 目前 我通过以下方式显式禁用所有组件 component1 setEnabled false 但是有什么办法可以一次性禁用所有组件吗 我尝试禁用
  • 为什么\0在java中不同系统中打印不同的输出

    下面的代码在不同的系统中打印不同的输出 String s hello vsrd replace 0 System out println s 当我在我的系统中尝试时 Linux Ubuntu Netbeans 7 1 它打印 When I
  • 使用 HtmlUnit 定位弹出窗口

    我正在构建一个登录网站并抓取一些数据的程序 登录表单是一个弹出窗口 所以我需要访问这个www betexplorer com网站 在页面的右上角有一个登录链接 写着 登录 我单击该链接 然后出现登录弹出表单 我能够找到顶部的登录链接 但找不
  • 在 Spring 上下文中查找方法级自定义注释

    我想知道的是 所有的类 方法Spring http en wikipedia org wiki Spring Framework注释为 Versioned的bean 我创建了自定义注释 Target ElementType METHOD E
  • 将 JScrollPane 添加到 JFrame

    我有一个关于向 Java 框架添加组件的问题 我有一个带有两个按钮的 JPanel 和一个添加了 JTable 的 JScrollPane 我想将这两个添加到 JFrame 中 我可以将 JPanel 添加到 JFrame 或将 JScro
  • Hibernate 本机查询 - char(3) 列

    我在 Oracle 中有一个表 其中列 SC CUR CODE 是 CHAR 3 当我做 Query q2 em createNativeQuery select sc cur code sc amount from sector cost
  • 在java中以原子方式获取多个锁

    我有以下代码 注意 为了可读性 我尽可能简化了代码 如果我忘记了任何关键部分 请告诉我 public class User private Relations relations public User relations new Rela
  • java'assert'和'if(){}else exit;'之间的区别

    java和java有什么区别assert and if else exit 我可以用吗if else exit代替assert 也许有点谷歌 您应该记住的主要事情是 if else 语句应该用于程序流程控制 而assert 关键字应该仅用于
  • Java 和/C++ 在多线程方面的差异

    我读过一些提示 多线程实现很大程度上取决于您正在使用的目标操作系统 操作系统最终提供了多线程能力 比如Linux有POSIX标准实现 而windows32有另一种方式 但我想知道编程语言水平的主要不同 C似乎为同步提供了更多选择 例如互斥锁

随机推荐

  • 将 slug 保存到数据库或动态生成更好?

    我正在开发一个 django 项目 并希望在 url 末尾包含一个 slug 就像在 stackoverflow com 上所做的那样 http example com object 1 my slug generated from my
  • Jetpack Compose - 如何在 LazyColumn 中搜索并显示房间中的特定数据?

    我想使用搜索查询从房间表中获取数据 并将结果显示在 LazyColumn 中 而不是我在那里显示的 someList 中 换句话说 如何使用 compose from room table 实现搜索功能 Getting the list f
  • AssertEquals 2 列表忽略顺序

    我相信这应该是一个非常简单的问题 但不知何故我无法在谷歌中找到答案 假设我有 2 个字符串列表 首先包含 字符串A 和 字符串B 第二个包含 字符串B 和 字符串A 注意顺序差异 我想测试它们JUnit检查它们是否包含一模一样字符串 是否有
  • 虽然声明不起作用?

    include
  • 在 EF 中使用 Attach 时,是否可以不覆盖我尚未更新的属性?

    我通过将现有实体附加到我的数据上下文来更新它 如下所示 var updatedDocumentState new AccDocumentState Id accDocumentState Id IsDocumentary accDocume
  • 在 Vim 中有效地附加匹配:g/---/s/---/X/

    如何引用命令中的匹配项g in Vim 我想在比赛后面加上 X 而不替换比赛 例如 在以下命令中 不写create title twice g create title s create title X 你应该得到 create title
  • 如何清除屏幕命令中的回滚?

    我用screen命令用于 Linux 中的命令行多任务处理 我将回滚缓冲区长度设置为一个非常大的值 当我不想再保留某个选项卡时 是否有组合键可以清除该选项卡的缓冲区 这个线程 http osdir com ml gnu screen use
  • 如何在 ItemsControls 中使用 AlternationIndex?

    我看过一些文章展示如何使用AlternationIndex with ListBoxes or ListViews 但我花了几个小时试图在底座上获得交替的背景颜色ItemsControl类 似乎没有任何作用 全部ListBox我看到使用的样
  • 在 C 中使用 true 和 false

    据我所知 在 C 语言中使用布尔值有三种方法 使用 bool 类型 来自 然后使用 true 和 false 使用预处理器定义 define FALSE 0 define TRUE FALSE 只是直接使用常量 即 1 和 0 还有其他我错
  • 如何在 R 中组合两个列表

    我有两个清单 l1 list 2 3 l2 list 4 我想要第三个清单 list 2 3 4 我怎样才能以简单的方式做到这一点 虽然我可以在 for 循环中完成它 但我期待一个单行答案 或者可能是一个内置方法 其实我有一个清单 list
  • 出于单元测试目的覆盖对象属性

    我正在使用 Jest 在 Node js 应用程序上执行单元测试 其中代码源是用 TypeScript 编写的 然后编译为 JavaScript 在我希望测试的一个类中 导入了一个外部模块并使用了该模块中的方法 我想模拟对此方法的调用 以便
  • 区域未传递给 ASP.net Core 中的 Url.Action()

    以下代码在正常的 ASP net MVC 中工作 Url Action actionName controllerName new Area areaName 但它在 ASP net Core 中运行得不太好 区域被识别为查询字符串参数 我
  • 相同值零算法如何工作?

    我正在浏览 Javascript info 中的地图章节 其中有一个关于 SameValueZero 算法的链接 有人可以用简单的语言解释一下该算法是如何工作的吗 我尝试通过链接但找不到任何内容 See the 规格 https www e
  • 如果浏览器是 ie9,则执行某些 javascript

    我想在浏览器低于IE9的情况下执行jQuery中的某些代码 是的 我已经知道了 但我想要的是检查脚本标签内的这个条件并使用 jQuery document ready 您可以通过以下类别定位较旧的 Internet Explorer 版本
  • 如何拆分我的代码的解决方案?

    当您向我的代码提出问题时 它会告诉您您的问题 但我无法更改它 因此它有多种解决方案 它总是为所有不同的问题提供相同的解决方案 我要问的是如何为正确的问题提供正确的解决方案 而不是所有问题都只导致一个解决方案 其中显示 print 您问题的解
  • 在angularjs中使用debounce延迟代码

    我必须在 AngularJS 中编写电子邮件验证功能 当用户使用电子邮件 ID 完成编辑后 我想在 2 秒后发出发布请求 AngularJS 中有没有为此预先定义的方法 fiddle http jsfiddle net Qdk5M 1944
  • 将句子每行一个单词分开

    是否可以使用 CSS 将句子分成每行一个单词 Input div Hello world foo bar div 渲染输出 Hello world foo bar 将宽度设置为例如1px是不希望的 你必须使用display table ca
  • 对于导航堆栈的根视图控制器,isMovingToParentViewController 总是返回 FALSE?

    确定导航堆栈的根视图 顶级 控制器是由于最初呈现还是未被发现而出现的正确方法是什么 iOS 文档建议在 viewWill DidAppear 中使用 isMovingToParentViewController 来做出决定 这适用于推送到堆
  • Django-rest-framework 与 django OAuth 2.0 给出身份验证错误

    我已将 django rest framework 与 django oauth toolkit 集成 它给了我 detail Authentication credentials were not provided 使用未经身份验证的 A
  • AspectJ EDT-Checker 代码问题

    我目前正在使用 Alexander Potochkin 的 AspectJEDT 检查器代码 http weblogs java net blog alexfromsun archive 2006 02 debugging swing ht