开源 企业版 高校版 私有云 模力方舟 AI 队友
代码拉取完成,页面将自动刷新
加入 Gitee
与超过 1400万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
已有帐号? 立即登录
文件
master
分支 (3)
master
jdk8_del_doc
jdk8_no_comment
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
项目仓库所选许可证以仓库主分支所使用许可证为准
master
分支 (3)
master
jdk8_del_doc
jdk8_no_comment
克隆/下载
克隆/下载
提示
下载代码请复制以下命令到终端执行
为确保你提交的代码身份被 Gitee 正确识别,请执行以下命令完成配置
初次使用 SSH 协议进行代码克隆、推送等操作时,需按下述提示完成 SSH 配置
1 生成 RSA 密钥
2 获取 RSA 公钥内容,并配置到 SSH公钥
在 Gitee 上使用 SVN,请访问 使用指南
使用 HTTPS 协议时,命令行会出现如下账号密码验证步骤。基于安全考虑,Gitee 建议 配置并使用私人令牌 替代登录密码进行克隆、推送等操作
Username for 'https://gitee.com': userName
Password for 'https://userName@gitee.com': # 私人令牌
master
分支 (3)
master
jdk8_del_doc
jdk8_no_comment
java8
/
src
/
java
/
awt
/
SequencedEvent.java
java8
/
src
/
java
/
awt
/
SequencedEvent.java
SequencedEvent.java 7.16 KB
一键复制 编辑 原始数据 按行查看 历史
cinderella 提交于 2024年09月25日 22:32 +08:00 . JDK8初始化
/*
* Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved.
* ORACLE PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*/
package java.awt;
import java.util.LinkedList;
import sun.awt.AWTAccessor;
import sun.awt.AppContext;
import sun.awt.SunToolkit;
/**
* A mechanism for ensuring that a series of AWTEvents are executed in a
* precise order, even across multiple AppContexts. The nested events will be
* dispatched in the order in which their wrapping SequencedEvents were
* constructed. The only exception to this rule is if the peer of the target of
* the nested event was destroyed (with a call to Component.removeNotify)
* before the wrapping SequencedEvent was able to be dispatched. In this case,
* the nested event is never dispatched.
*
* @author David Mendenhall
*/
class SequencedEvent extends AWTEvent implements ActiveEvent {
/*
* serialVersionUID
*/
private static final long serialVersionUID = 547742659238625067L;
private static final int ID =
java.awt.event.FocusEvent.FOCUS_LAST + 1;
private static final LinkedList<SequencedEvent> list = new LinkedList<>();
private final AWTEvent nested;
private AppContext appContext;
private boolean disposed;
static {
AWTAccessor.setSequencedEventAccessor(new AWTAccessor.SequencedEventAccessor() {
public AWTEvent getNested(AWTEvent sequencedEvent) {
return ((SequencedEvent)sequencedEvent).nested;
}
public boolean isSequencedEvent(AWTEvent event) {
return event instanceof SequencedEvent;
}
});
}
/**
* Constructs a new SequencedEvent which will dispatch the specified
* nested event.
*
* @param nested the AWTEvent which this SequencedEvent's dispatch()
* method will dispatch
*/
public SequencedEvent(AWTEvent nested) {
super(nested.getSource(), ID);
this.nested = nested;
// All AWTEvents that are wrapped in SequencedEvents are (at
// least currently) implicitly generated by the system
SunToolkit.setSystemGenerated(nested);
synchronized (SequencedEvent.class) {
list.add(this);
}
}
/**
* Dispatches the nested event after all previous nested events have been
* dispatched or disposed. If this method is invoked before all previous nested events
* have been dispatched, then this method blocks until such a point is
* reached.
* While waiting disposes nested events to disposed AppContext
*
* NOTE: Locking protocol. Since dispose() can get EventQueue lock,
* dispatch() shall never call dispose() while holding the lock on the list,
* as EventQueue lock is held during dispatching. The locks should be acquired
* in the same order.
*/
public final void dispatch() {
try {
appContext = AppContext.getAppContext();
if (getFirst() != this) {
if (EventQueue.isDispatchThread()) {
EventDispatchThread edt = (EventDispatchThread)
Thread.currentThread();
edt.pumpEvents(SentEvent.ID, new Conditional() {
public boolean evaluate() {
return !SequencedEvent.this.isFirstOrDisposed();
}
});
} else {
while(!isFirstOrDisposed()) {
synchronized (SequencedEvent.class) {
try {
SequencedEvent.class.wait(1000);
} catch (InterruptedException e) {
break;
}
}
}
}
}
if (!disposed) {
KeyboardFocusManager.getCurrentKeyboardFocusManager().
setCurrentSequencedEvent(this);
Toolkit.getEventQueue().dispatchEvent(nested);
}
} finally {
dispose();
}
}
/**
* true only if event exists and nested source appContext is disposed.
*/
private final static boolean isOwnerAppContextDisposed(SequencedEvent se) {
if (se != null) {
Object target = se.nested.getSource();
if (target instanceof Component) {
return ((Component)target).appContext.isDisposed();
}
}
return false;
}
/**
* Sequenced events are dispatched in order, so we cannot dispatch
* until we are the first sequenced event in the queue (i.e. it's our
* turn). But while we wait for our turn to dispatch, the event
* could have been disposed for a number of reasons.
*/
public final boolean isFirstOrDisposed() {
if (disposed) {
return true;
}
// getFirstWithContext can dispose this
return this == getFirstWithContext() || disposed;
}
private final synchronized static SequencedEvent getFirst() {
return (SequencedEvent)list.getFirst();
}
/* Disposes all events from disposed AppContext
* return first valid event
*/
private final static SequencedEvent getFirstWithContext() {
SequencedEvent first = getFirst();
while(isOwnerAppContextDisposed(first)) {
first.dispose();
first = getFirst();
}
return first;
}
/**
* Disposes of this instance. This method is invoked once the nested event
* has been dispatched and handled, or when the peer of the target of the
* nested event has been disposed with a call to Component.removeNotify.
*
* NOTE: Locking protocol. Since SunToolkit.postEvent can get EventQueue lock,
* it shall never be called while holding the lock on the list,
* as EventQueue lock is held during dispatching and dispatch() will get
* lock on the list. The locks should be acquired in the same order.
*/
final void dispose() {
synchronized (SequencedEvent.class) {
if (disposed) {
return;
}
if (KeyboardFocusManager.getCurrentKeyboardFocusManager().
getCurrentSequencedEvent() == this) {
KeyboardFocusManager.getCurrentKeyboardFocusManager().
setCurrentSequencedEvent(null);
}
disposed = true;
}
// Wake myself up
if (appContext != null) {
SunToolkit.postEvent(appContext, new SentEvent());
}
SequencedEvent next = null;
synchronized (SequencedEvent.class) {
SequencedEvent.class.notifyAll();
if (list.getFirst() == this) {
list.removeFirst();
if (!list.isEmpty()) {
next = (SequencedEvent)list.getFirst();
}
} else {
list.remove(this);
}
}
// Wake up waiting threads
if (next != null && next.appContext != null) {
SunToolkit.postEvent(next.appContext, new SentEvent());
}
}
}
Loading...
举报
举报成功
我们将于2个工作日内通过站内信反馈结果给你!
请认真填写举报原因,尽可能描述详细。
请选择举报类型
取消
发送
误判申诉

此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。

如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。

取消
提交

发行版

暂无发行版

贡献者

全部

语言

近期动态

不能加载更多了
编辑仓库简介
简介内容
主页
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
Java
1
https://gitee.com/blackkeydestiny/java8.git
git@gitee.com:blackkeydestiny/java8.git
blackkeydestiny
java8
java8
master
点此查找更多帮助

搜索帮助

评论
仓库举报
回到顶部
登录提示
该操作需登录 Gitee 帐号,请先登录后再操作。
立即登录
没有帐号,去注册

AltStyle によって変換されたページ (->オリジナル) /