跳到主要内容

JEP 272: 平台特定的桌面功能

QWen Max 中英对照

概述

定义一个新的公共 API,用于访问特定于平台的桌面功能,例如与任务栏或程序坞进行交互,或者监听系统或应用程序事件。

目标

在即将发布的 JDK 9 中,内部 API(例如 Mac OS X 中的 com.apple.eawt 包中的 API)将不再可用。本 JEP 的目标是为这些不可访问的 API 提供适当的替代方案,同时引入相关的平台特定功能。我们计划在具备必要支持的平台上实现这些新功能。在可行的情况下,API 将被设计为跨平台的,以便每个功能都可以在尽可能广泛的平台上实现。apple.applescript 类正在被移除,并且不会提供任何替代方案。

非目标

我们不打算为 JDK 8 中存在的所有 OS X 内部 API 提供直接的替代品。具体来说,我们不会为 com.apple.concurrent 包提供替代品。对于那些我们确实提供了替代品的内部 API,保持兼容性也不是我们的目标。

描述

此 JEP 包含两个子任务:

提供公共 API 以替换 com.apple.{eawt,eio} 中的功能 {#Provide-public-API-to-replace-the-functionality-in-com-apple-{eawteio}}

此子任务的目的是避免 OS X 开发人员功能丧失。我们将为 JDK 内部的 com.apple.eawtcom.apple.eio 包中的 API 提供替代方案。

在其他平台提供对类似功能的访问

除了特定于 OS X 的功能外,还有其他平台(包括 Windows 和 Linux)可以支持的类似功能:

  • 登录/登出和屏幕锁定处理程序:提供系统登录/登出(或屏幕锁定/解锁)的事件监听器,以允许应用程序在需要时启动持久任务或保存其状态。

  • 任务栏/底座交互

    • 请求用户注意:允许应用程序使用平台功能请求用户的注意,例如在任务栏中闪烁应用程序图标或在底座中弹跳图标。

    • 指示任务进度:在任务栏/底座中显示进度条或其他指示器。

    • 动作快捷方式:提供可通过弹出菜单访问的动作快捷方式,例如,Windows 跳转列表。

对这些功能的支持将由平台功能决定。

API

我们建议将这两个子任务的公共 API 添加到现有的 java.awt.Desktop 类中。目标支持平台为 Mac OS X、Windows、Linux。

提议的 API 草图:

package java.awt;

public class Desktop {

/* ... */

/**
* Adds sub-types of {@link AppEventListener} to listen for notifications
* from the native system.
*
* @param listener
* @see AppForegroundListener
* @see AppHiddenListener
* @see AppReOpenedListener
* @see AppScreenSleepListener
* @see AppSystemSleepListener
* @see AppUserSessionListener
*/

public void addAppEventListener(final AppEventListener listener) {}

/**
* Requests user attention to this application (usually through bouncing the Dock icon).
* Critical requests will continue to bounce the Dock icon until the app is activated.
*
*/
public void requestUserAttention(final boolean critical) {}

/**
* Attaches the contents of the provided PopupMenu to the application's Dock icon.
*/
public void setDockMenu(final PopupMenu menu) {}

/**
* Changes this application's Dock icon to the provided image.
*/
public void setDockIconImage(final Image image) {}


/**
* Affixes a small system provided badge to this application's Dock icon. Usually a number.
*/
public void setDockIconBadge(final String badge) {}

/**
* Displays or hides a progress bar or other indicator in
* the dock.
*
* @see DockProgressState.NORMAL
* @see DockProgressState.PAUSED
* @see DockProgressState.ERROR
*
* @see #setDockProgressValue
*/
public void setDockProgressState(int state) {}

/**
* Sets the progress bar's current value to {@code n}.
*/
public void setDockProgressValue(int n) {}

/**
* Tests whether a feature is supported on the current platform.
*/

public boolean isSupportedFeature(Feature f) {}

/* ... */
}
QWen Max 中英对照

测试

测试将仅限于为使用新 API 而编写的其他手动测试。测试需要检查新功能是否在预计支持它们的平台上得到支持,并且在不支持它们的平台上能够优雅地失败。