存在使用com.sun.java.swing.SwingUtilities2現在我明白了,這個類不應該被用來在應用程序內組件,但它是使用它的系統中的一個組成部分。的Java 6和SwingUtilities2
因此,因爲它不再可用Java 6中,我得到一個NoClassDefFoundError錯誤。我怎樣才能解決這個問題,而不必升級組件,因爲我不知道這是否是一種選擇。
存在使用com.sun.java.swing.SwingUtilities2現在我明白了,這個類不應該被用來在應用程序內組件,但它是使用它的系統中的一個組成部分。的Java 6和SwingUtilities2
因此,因爲它不再可用Java 6中,我得到一個NoClassDefFoundError錯誤。我怎樣才能解決這個問題,而不必升級組件,因爲我不知道這是否是一種選擇。
如果你絕對沒有其他選擇,那麼你應該找出到底什麼是類是從SwingUtilities2使用,然後讓代理爲自己SwingUtilities2該功能。然後,您可以將其粘貼到您自己的com.sun.java.swing包中,該包將與原始包重疊,並且如果加載組件的同一類加載程序也知道SwingUtilities2,則會看到另一個,並且您的應用程序將工作。
根據成分是什麼,它使用了SwingUtilities2的是什麼,這可能是比升級它,甚至重寫它顯著困難。
我同意。你有任何想法,如果來源可在任何地方。我知道這不是開源的,但有人必須創建某種類來取代它... – 2009-10-19 20:44:18
除了反編譯它之外。 – 2009-10-19 20:45:18
http://www.google.com/search?q=SwingUtilities2.java – 2009-10-19 21:03:07
Da-dum!這正是爲什麼你應該注意那些討厭你不要依賴JVM內部的討厭警告!
但你有解決方案嗎? – 2009-10-19 20:33:27
@Rob你認爲@Stephane造成了他必須支持的問題。如果你必須解決這個問題,你如何解決這個問題? – reccles 2009-10-19 20:49:01
它實際上是在購買包含在軟件中的組件。該組件,因爲它是專有的,被混淆了。我也不知道(甚至你怎麼可能)知道它正在使用這個類。 – 2009-10-19 21:13:31
只是一個雖然,我不知道這是否會工作。
嘗試拉出SwingUtilities2類,並把它放在一個罐子補丁,包括這個jar classpath中。希望這可以工作,直到你可以改變源代碼。
不幸的是,完全不是那麼回事。有一個線((布爾)C .getClientProperty(AA_TEXT_PROPERTY_KEY));總是返回null,因此拋出一個NullPointerException – 2009-10-19 20:56:48
編輯複製類中引用本地參考我覺得NP是因爲它使用的是真正的6 variab LES。雖然最好讓廠商重建一個6。有些公司爲此做了快速修復 – reccles 2009-10-19 22:32:03
的唯一正確途徑(出黑客的)是要求供應商給此組件的修復和重建到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)。如果可能的話,嘗試禁用組件的抗鋸齒檢查。
雖然很高興地說,恐怕這是一條昂貴的路線。該組件是在JDK 5錯誤中構建的,所以我不能因爲不支持JDK 6而將它們排除在外。 – 2009-10-21 14:34:24
如果沒有,請從我的建議中選擇另一條路徑。 – 2009-10-21 20:01:03
你打算命名和羞辱組件的提供者嗎? – 2009-10-19 22:02:20
這是一個現貨修復?是否有可能讓供應商爲6重建? – reccles 2009-10-19 22:24:42
@Tom:他們已經修好了,我們只是不想吸收時間和金錢成本。例如,他們已經改進了他們的API,但我們不需要任何改進(除了此修復)。我們也不知道我們的代碼是否需要提升以匹配新的API(更多的時間成本)。當然還有組件的「升級」成本。 – 2009-10-21 14:32:00