2009-10-19 52 views
5

存在使用com.sun.java.swing.SwingUtilities2現在我明白了,這個類不應該被用來在應用程序內組件,但它是使用它的系統中的一個組成部分。的Java 6和SwingUtilities2

因此,因爲它不再可用Java 6中,我得到一個NoClassDefFoundError錯誤。我怎樣才能解決這個問題,而不必升級組件,因爲我不知道這是否是一種選擇。

+0

你打算命名和羞辱組件的提供者嗎? – 2009-10-19 22:02:20

+0

這是一個現貨修復?是否有可能讓供應商爲6重建? – reccles 2009-10-19 22:24:42

+0

@Tom:他們已經修好了,我們只是不想吸收時間和金錢成本。例如,他們已經改進了他們的API,但我們不需要任何改進(除了此修復)。我們也不知道我們的代碼是否需要提升以匹配新的API(更多的時間成本)。當然還有組件的「升級」成本。 – 2009-10-21 14:32:00

回答

5

如果你絕對沒有其他選擇,那麼你應該找出到底什麼是類是從SwingUtilities2使用,然後讓代理爲自己SwingUtilities2該功能。然後,您可以將其粘貼到您自己的com.sun.java.swing包中,該包將與原始包重疊,並且如果加載組件的同一類加載程序也知道SwingUtilities2,則會看到另一個,並且您的應用程序將工作。

根據成分是什麼,它使用了SwingUtilities2的是什麼,這可能是比升級它,甚至重寫它顯著困難。

+0

我同意。你有任何想法,如果來源可在任何地方。我知道這不是開源的,但有人必須創建某種類來取代它... – 2009-10-19 20:44:18

+0

除了反編譯它之外。 – 2009-10-19 20:45:18

+0

http://www.google.com/search?q=SwingUtilities2.java – 2009-10-19 21:03:07

1

Da-dum!這正是爲什麼你應該注意那些討厭你不要依賴JVM內部的討厭警告!

+0

但你有解決方案嗎? – 2009-10-19 20:33:27

+3

@Rob你認爲@Stephane造成了他必須支持的問題。如果你必須解決這個問題,你如何解決這個問題? – reccles 2009-10-19 20:49:01

+2

它實際上是在購買包含在軟件中的組件。該組件,因爲它是專有的,被混淆了。我也不知道(甚至你怎麼可能)知道它正在使用這個類。 – 2009-10-19 21:13:31

1

只是一個雖然,我不知道這是否會工作。

嘗試拉出SwingUtilities2類,並把它放在一個罐子補丁,包括這個jar classpath中。希望這可以工作,直到你可以改變源代碼。

+0

不幸的是,完全不是那麼回事。有一個線((布爾)C .getClientProperty(AA_TEXT_PROPERTY_KEY));總是返回null,因此拋出一個NullPointerException – 2009-10-19 20:56:48

+0

編輯複製類中引用本地參考我覺得NP是因爲它使用的是真正的6 variab LES。雖然最好讓廠商重建一個6。有些公司爲此做了快速修復 – reccles 2009-10-19 22:32:03

1

的唯一正確途徑(出黑客的)是要求供應商給此組件的修復和重建到Java 6的可能的工作方式是拷貝sun.swing.SU2到的com.sun ... SU2並將其打包成單獨的jar(例如java6fix.jar)並嘗試運行您的應用程序。如果您將此修補程序jar添加到jvm bootclasspath中,那將會很好。最好的補丁應該是創建自己的com.sun..SU2並將所有調用委託給sun.swing.SU2。並且查看支持Java6的不同版本的組件,也可能來自不同的供應商。此外,如果問題只出現在上述行((Boolean)c.getClientProperty(AA_TEXT_PROPERTY_KEY));那麼你可以把你自己的客戶端屬性爲這個組件,以防止NPE。當你採用這個路徑時,你可以簡單地創建你自己的com.sun ... SU2.AA_TEXT_PROPERTY_KEY並且在這個組件上調用c.setClientProperty(AA_TEXT_PROPERTY_KEY,true)。如果可能的話,嘗試禁用組件的抗鋸齒檢查。

+0

雖然很高興地說,恐怕這是一條昂貴的路線。該組件是在JDK 5錯誤中構建的,所以我不能因爲不支持JDK 6而將它們排除在外。 – 2009-10-21 14:34:24

+0

如果沒有,請從我的建議中選擇另一條路徑。 – 2009-10-21 20:01:03