Должен ли я быть обеспокоен использованием AWTUtilities.setWindowShape()?

Я использую AWTUtilities класс в моем приложении для создания пользовательских оконных форм. Насколько я знаю, другого способа сделать это не существует. Это требование.

Поколение Javadoc дает мне эту ошибку:

предупреждение: com.sun.awt.AWTUtilities является проприетарным API Sun и может быть удалено в будущем выпуске

Что именно это означает? Я могу использовать его, но он может перестать работать с любым выпуском? Зачем вставлять это тогда? Что еще более важно, и реальный вопрос здесь, если Sun удалит это, они, вероятно, заменят это другим способом сделать то же самое? Это то, для чего предупреждение?

Я полагаю, я мог бы просто проверить наличие класса AWTUtilities перед вызовом кода. Но это просто противно, если мне не нужно это делать.

У кого-нибудь есть опыт работы с подобными классами? Были ли они в конечном итоге приняты в API, и предупреждение было удалено или заменено другим методом, выполняющим то же самое? Нужно ли беспокоиться об этом?

К вашему сведению, я прочитал это:

Как распространять AWTUtilities

2 ответа

Решение

Документация Oracle гласит:

Примечание: класс com.sun.awt.AWTUtilities не является частью официально поддерживаемого API и отображается как деталь реализации. API предназначен только для ограниченного использования вне базовой платформы. Это может резко измениться между выпусками обновлений, и даже может быть удалено или перемещено в некоторые другие пакеты или классы. Класс должен использоваться через Java Reflection. Поддерживаемые и общедоступные API появятся в следующем основном выпуске JDK.

JDK 7 уже давно придет, так что это может быть какое-то время. Нужно ли вам это использовать - это вопрос управления рисками, на который может ответить только ваша компания. Если мы говорим о внутреннем приложении, в котором развернутая JRE может быть гарантирована, то у вас не будет проблем, потому что вы можете гарантировать совместимую JRE. Если мы говорим о развертывании для внешних клиентов, то вам нужен план поддержки, если этот временный API когда-либо изменится.

Стабильный способ сделать это - создать оболочку в SWT согласно этому фрагменту, а затем использовать мост SWT_AWT, чтобы получить фрейм для использования в вашем приложении:

java.awt.Frame frame = SWT_AWT.new_Frame(shell);

Если вы просто развертываете на одной платформе (например, Windows), то бросаете одну SWT-банку плюс собственную библиотеку. Если вы ориентируетесь на несколько платформ, это становится проблемой.

Так что это два варианта: справиться с риском AWTUtilities или использовать мост SWT_AWT.

РЕДАКТИРОВАТЬ:

Прошло некоторое время, и Java 7 вышла. Документация по официально поддерживаемому способу достижения этой цели содержится в руководствах по Java. Раздел "Как реализовать фасонное окно" внизу дает пример. Это, конечно, предполагает, что вы можете поручить Java 7

Вам не нужен новый объект Frame, вы можете использовать только

this.setShape(shape);

или ваше имя кадра, как это

Frame1.setShape(shape);

много методов AWT было применено к java.awt.Frame

Другие вопросы по тегам