2010-08-03 87 views
4

我在我的應用程序中使用AWTUtilities類來創建自定義窗口形狀。據我所知,沒有其他辦法可以做到這一點。這是一個要求。我應該關心使用AWTUtilities.setWindowShape()嗎?

的Javadoc代給了我這個錯誤:

warning: com.sun.awt.AWTUtilities is Sun proprietary API and may be removed in a future release

究竟是什麼意思?我可以使用它,但它可能會停止與任何版本的工作?爲什麼放進去呢?更重要的是,如果Sun提出這個問題的真正問題,他們是否會用另一種方式替代它來做同樣的事情?這是警告的目的嗎?

我想我可以在調用代碼之前檢查AWTUtilities類的存在。但如果我不需要這樣做,那只是令人厭惡的。

有沒有人有類似類的經驗?他們最終是否接受了API,並且刪除了警告或者用另一種做同樣事情的方法取代了警告?我需要關注這個嗎?

僅供參考,我已閱讀本:

How to distribute AWTUtilities

回答

4

甲骨文documentation狀態:

Note: the com.sun.awt.AWTUtilities class is not part of an officially supported API and appears as an implementation detail. The API is only meant for limited use outside of the core platform. It may change drastically between update releases, and it may even be removed or be moved in some other packages or classes. The class should be used via Java Reflection. Supported and public API will appear in the next major JDK release.

JDK 7已經等了很久了,因此可能需要一段時間。你是否應該使用它是一個風險管理問題,只有你的公司才能回答。如果我們正在討論可以保證部署的JRE的內部應用程序,那麼您不會遇到問題,因爲您可以保證兼容的JRE。如果我們正在談論部署給外部客戶,那麼如果這個臨時API發生變化,您需要有一個支持計劃。

一個穩定的方式來做到這將是SWT創建一個Shell按本snippet,然後使用SWT_AWT橋得到的框架,您的應用程序中使用:

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

如果你是剛剛部署到一個單一的平臺(如Windows),然後扔一個SWT jar和本地庫。如果你的目標是多個平臺,那麼這會變得很痛苦。

所以這些是兩個選擇:處理AWTUtilities風險或使用SWT_AWT橋樑。

編輯:

經過一些時間和Java 7出來了。在Java Tutorials中有正式支持的方式來完成此操作的文檔。底部的「如何實現一個形狀的窗口」部分給出了一個例子。這當然假定您可以授權的Java 7

+0

我們不能使用SWT_AWT,因爲我們正在創建自定義shell。所以我們必須處理風險。很高興知道,在Java 7之前,我不必擔心這個類會被刪除。 – 2010-08-04 13:53:52

0

你並不需要一個新的幀的對象,你只能用

this.setShape(shape); 

或你的框架名稱這樣

Frame1.setShape(shape); 

很多AWT方法已應用於java.awt。Frame