Должен ли я быть обеспокоен использованием AWTUtilities.setWindowShape()?
Я использую AWTUtilities
класс в моем приложении для создания пользовательских оконных форм. Насколько я знаю, другого способа сделать это не существует. Это требование.
Поколение Javadoc дает мне эту ошибку:
предупреждение: com.sun.awt.AWTUtilities является проприетарным API Sun и может быть удалено в будущем выпуске
Что именно это означает? Я могу использовать его, но он может перестать работать с любым выпуском? Зачем вставлять это тогда? Что еще более важно, и реальный вопрос здесь, если Sun удалит это, они, вероятно, заменят это другим способом сделать то же самое? Это то, для чего предупреждение?
Я полагаю, я мог бы просто проверить наличие класса AWTUtilities перед вызовом кода. Но это просто противно, если мне не нужно это делать.
У кого-нибудь есть опыт работы с подобными классами? Были ли они в конечном итоге приняты в API, и предупреждение было удалено или заменено другим методом, выполняющим то же самое? Нужно ли беспокоиться об этом?
К вашему сведению, я прочитал это:
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