加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

从javax.swing.text尝试针对AbstractDocument.UndoRedoDocumentE

发布时间:2020-12-14 19:14:10 所属栏目:Java 来源:网络整理
导读:在javax.swing.text.DefaultCaret.Handler.insertUpdate(DocumentEvent)的源代码中,我找到了以下行(从第1685行开始): if (e instanceof AbstractDocument.UndoRedoDocumentEvent) { setDot(offset + length); return;} 但是,当我尝试这个: package javax.s

在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)

为什么我不能对该类进行实例化,但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的MANIFEST(包含javax.swing.text包的那个)不包含“Sealed”.命令Package.getPackage(“javax.swing.text”).isSealed()返回false.

所以我可以反对我自己的内部类,但不能反对AbstractDocument.UndoRedoDocumentEvent,即使包中的其他类可以.

任何想法为什么会这样?

最佳答案
看起来UndoRedoDocument是受包保护的,而DefaultCaret.Handler和UndoRedoDocument在同一个包中(如果我没记错的话,javax.swing.text).

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读