checkSystemClipboardAccess альтернатива для JDK11 - PullRequest
3 голосов
/ 01 февраля 2020

JDK11 удалил checkSystemClipboardAccess из SecurityManager. Какова альтернативная идиома в обработке буфера обмена?

Я хотел проверить доступность буфера обмена следующим образом:

public static boolean hasClipboard() {
    SecurityManager sm = System.getSecurityManager();
    if (sm == null) return true;
    try {
        sm.checkSystemClipboardAccess();
        return true;
    } catch (SecurityException x) {
        /* */
    }
    return false;
}

Но невозможно скомпилировать его в JDK11.

Изменить 01.02.2020:
На основе предложений, которые я сейчас использую:

public static boolean hasClipboard() {
    SecurityManager sm = System.getSecurityManager();
    if (sm == null) return true;
    try {
        sm.checkPermission(new AWTPermission("accessClipboard"));
        return true;
    } catch (SecurityException x) {
        /* */
    }
    return false;
}

Ответы [ 2 ]

2 голосов
/ 01 февраля 2020

A [Google] поиск по терминам java checkSystemClipboardAccess удален предоставил ссылку на Oracle s javado c для класса SecurityManager (JDK 10) и документация для метода checkSystemClipboardAccess () содержит следующее:

Устаревший для удаления: этот элемент API подлежит удалению в будущей версии. Этот метод первоначально использовался для проверки, может ли вызывающий поток получить доступ к системному буферу обмена. Метод устарел, и вместо этого код должен использовать checkPermission (java .security.Permission) для проверки AWTPermission ("accessClipboard"). Этот метод подлежит удалению в будущей версии Java SE.

2 голосов
/ 01 февраля 2020

Быстрое решение состоит в том, чтобы просто заменить ваш звонок на sm.checkSystemClipboardAccess(); звонком на sm.checkPermission(new java.awt.AWTPermission("accessClipboard"));.

См. Технику Oracle JDK 8 technote Разрешения в Java Development Kit (JDK) , который явно обращается к устареванию checkSystemClipboardAccess():

Метод

publi c void checkSystemClipboardAccess (); Примечание: Этот метод устарел; вместо этого используйте publi c void checkPermission (Perm perm);

Permission

java .awt.AWTPermission "accessClipboard";

...