JEP 272:特定于平台的桌面功能
概括
定义新的公共 API 来访问特定于平台的桌面功能,例如与任务栏或扩展坞交互,或者侦听系统或应用程序事件。
目标
在即将发布的 JDK 9 中,内部 API(例如 Mac OS Xcom.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.eawt
和com.apple.eio
包中提供 API 的替代品。
提供对其他平台上类似功能的访问
除了 OS X 特有的功能外,其他平台(包括 Windows 和 Linux)也支持类似的功能:
-
登录/注销和屏幕锁定处理程序:在系统登录/注销(或屏幕锁定/解锁)时提供事件侦听器,以允许应用程序在需要时启动持久任务或保存其状态。
-
任务栏/dock交互
-
请求用户注意:允许应用程序使用平台功能(例如在任务栏中闪烁应用程序图标或在 Dock 中弹起图标)来请求用户注意。
-
指示任务进度:在任务栏/底座中显示进度条或其他指示器。
-
操作快捷方式:提供可通过弹出菜单访问的操作快捷方式,例如 Windows 跳转列表。
-
对这些功能的支持将由平台功能决定。
应用程序编程接口
我们建议将这两个子任务的公共 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) {}
/* ... */
}
测试
测试将仅限于为使用新 API 编写的额外手动测试。测试需要检查新功能是否在预期支持的平台上受支持,以及它们在不支持的平台上是否正常失败。