- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
在 javax.swing.text.DefaultCaret.Handler.insertUpdate(DocumentEvent)
的源代码中,我发现了以下几行(从第 1685 行开始):
if (e instanceof AbstractDocument.UndoRedoDocumentEvent) {
setDot(offset + length);
return;
}
但是当我尝试这样做时:
package javax.swing.text;
public class Foo {
public static void main(String[] args) {
Object o = new Object();
if (o instanceof AbstractDocument.UndoRedoDocumentEvent) {
System.out.println("yay");
} else {
System.out.println("aww");
}
}
}
它将给出:
Exception in thread "main" java.lang.IllegalAccessError: tried to access class javax.swing.text.AbstractDocument$UndoRedoDocumentEvent from class javax.swing.text.Foo
at javax.swing.text.Foo.main(Foo.java:6)
为什么我不能 instanceof
针对那个类,但是 DefaultCaret.Handler
可以?
使用 java 版本 1.6.0_20
$ java -version
java version "1.6.0_20"
OpenJDK Runtime Environment (IcedTea6 1.9.7) (6b20-1.9.7-0ubuntu1~10.04.1)
OpenJDK Client VM (build 19.0-b09, mixed mode, sharing)
更新:
根据我尝试的答案:
文件 Foo.java
:
package javax.swing.text;
public class Foo {
public static void main(String[] args) {
Object o = new Object();
if (o instanceof Outer.Inner) {
System.out.println("yay");
} else {
System.out.println("aww");
}
}
}
文件Outer.java
:
package javax.swing.text;
public class Outer {
class Inner {
}
}
这工作正常并按预期打印“aww”。
请注意,这两个文件都在包 javax.swing.text
中。另请注意,在我最初的问题中,Foo.java
已经在包 javax.swing.text
中。
据我所知,包裹没有“密封”。 rt.jar
的 list (包含包 javax.swing.text
的 list )不包含“Sealed”。命令 Package.getPackage("javax.swing.text").isSealed()
返回 false。
所以我可以针对我自己的内部类instance of
,但不能针对 AbstractDocument.UndoRedoDocumentEvent
,即使包中的其他类也可以。
知道这是为什么吗?
最佳答案
看起来 UndoRedoDocument
是受包保护的,DefaultCaret.Handler
和 UndoRedoDocument
在同一个包中(javax.Handler)。 swing.text
如果我没记错的话)。
关于java - 从 javax.swing.text 对 AbstractDocument.UndoRedoDocumentEvent 尝试 instanceof 时出现 IllegalAccessError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5606757/
我在运行 Android 仪器测试时收到 IllegalAccessError。 这是 Logcat 输出: java.lang.IllegalAccessError: Class ref in pr
当我运行下面的源代码时,我在 shell 窗口中看到的运行时错误如下: Exception in thread "main" java.lang.IllegalAccessError: tried t
我在我的类方法中遇到了与 IllegalAccessError 相关的问题(仅在 Android 8 设备上) 我更新了: Android Studio 到 3.3 Gradle 到 3.3.0 的
我目前正在对未记录的代码进行维护,并且在 Spring Boot 中运行类时偶然发现了一个奇怪的错误。代码在执行时会引发 IllegalAccessError,但可以正确编译。 似乎原始团队尝试访问
我正在为类(class)设置我的第一个程序,但我一直困惑为什么我的程序无法运行并尝试调试。我需要做什么来调试这个错误? 我尝试添加库,但这似乎不起作用。 import javafx.event.Act
我正在翻译 this code到 Clojure。如您所见,我必须扩展 ArthurFrame 类,但每次使用 (proxy [ArthurFrame] [] ... )。 知道为什么吗?这是 cla
我有以下情况: 同一工作区中的 2 个 Eclipse 项目:Apa 和 Bepa(为简洁起见,使用化名)。 Apa 项目引用(包括)Bepa 项目。 我在 Bepa 有一个类 X,具有公共(publ
Oracle JavaDocs 解释说 IllegalAccessError 是 "Thrown if an application attempts to access or modify a fi
我目前正在编写一个自动更新程序,它可以从 GitHub 下载最新版本的插件。我禁用了该插件,我可以替换它,现在我想启用它,但出现以下错误 java.lang.IllegalAccessError: t
我有一个简单的函数,用于从所选目录加载类“Myclass”。 // Variables File temp = new File("some path..."); String
在下面的代码中,我给出了两个主要类 - TestWorks 和 TestCompilesButFails。我不确定我是否理解失败 - 似乎 Arrays.asList() 表达式被赋予类型“Abstr
我创建了一个自定义 ParquetOutputFormat(org.apache.parquet.hadoop 中的类)来覆盖 getRecordWriter 方法。在 getRecordWriter
我正在开发一个旨在使用 Renderscript 支持库的应用程序。使用 Android Studio 0.5.4 和 Gradle 1.11 进行开发。 配置我使用的渲染脚本 android {
我的应用程序在 5+ 和 6+ 上完美运行,但在 7 上却不行。当应用程序尝试登录服务器时抛出此异常: 09-01 09:52:53.821 2654-2718/com.pipodi.italians
我昨天买了一台新电脑 (Dell XPS 13)。我刚刚安装了 JDK 并将我所有的旧 Java 项目复制到我的新设备上,但是当我尝试运行这些程序中的任何一个时,我遇到了非法访问错误。 编辑:注意:在
我正在用 jackson 开发软件,但完全卡住了......当我用 java -jar .jar 运行 spring-boot 程序时命令,我收到以下错误: ... Caused by: org.sp
IllegalAccessError 类有两个构造函数,IllegalAccessError() 和 IllegalAccessError(String s)。 为什么 IllegalAccessEr
我找到了 this JDK bug并想了解它发生的原因。 场景(取自 the bug report)非常简单:一个 class 声明一个 private 方法,一个 interface 声明一个 pu
该应用程序包含一个短暂显示的初始屏幕,该 Activity 正在使用 IdlingResource 进行插桩测试,以便测试知道初始屏幕何时关闭。问题是 SplashActivity 在运行 API 1
我是一名具有编写 PHP、python 和 ruby 经验的新手工程师。我正在尝试为一个用 clojure 编写的项目做出贡献。我正在尝试向项目添加一个库,但在添加库并运行后 lein uberj
我是一名优秀的程序员,十分优秀!