簡體   English   中英

如何在Java中使用已棄用的導入?

[英]How to use a deprecated import in java?

我有一個.jar庫,該庫使用已棄用的導入"sun.misc.ref"但現在應該是"java.lang.ref.SoftReference" ,我該如何指出呢?

在下面,我發布了我得到的錯誤。 我正在使用acrobat reader API 1.1,是的,我想在應用程序內部而不是外部打開.pdf文件。

    Exception in thread "AWT-EventQueue-0" java.lang.NoClassDefFoundError: sun/misc/Ref
    at java.base/java.lang.ClassLoader.defineClass1(Native Method)
    at java.base/java.lang.ClassLoader.defineClass(ClassLoader.java:1016)
    at java.base/java.security.SecureClassLoader.defineClass(SecureClassLoader.java:174)
    at java.base/jdk.internal.loader.BuiltinClassLoader.defineClass(BuiltinClassLoader.java:802)
    at java.base/jdk.internal.loader.BuiltinClassLoader.findClassOnClassPathOrNull(BuiltinClassLoader.java:700)
    at java.base/jdk.internal.loader.BuiltinClassLoader.loadClassOrNull(BuiltinClassLoader.java:623)
    at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:581)
    at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178)
    at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521)
    at com.adobe.pe.notify.VValuePurgeable.<init>(VValuePurgeable.java:92)
    at com.adobe.acrobat.gui.VOrnamentList.<init>(VOrnamentList.java:16)
    at com.adobe.acrobat.gui.PageView$VGalleyOrnaments.<init>(PageView.java:1083)
    at com.adobe.acrobat.gui.PageView.<init>(PageView.java:1081)
    at com.adobe.acrobat.gui.AcroViewContext.commonInit(AcroViewContext.java:166)
    at com.adobe.acrobat.gui.AcroViewContext.<init>(AcroViewContext.java:99)
    at com.adobe.acrobat.Viewer.createViewer(Viewer.java:243)
    at com.adobe.acrobat.Viewer.<init>(Viewer.java:211)
    at screens.PdfReader_AcrobatReader.<init>(PdfReader_AcrobatReader.java:38)
    at screens.Main.pdf(Main.java:344)
    at screens.Library_Book.tblMouseLeftBtn(Library_Book.java:101)
    at screens.Library_Book.access$000(Library_Book.java:22)
    at screens.Library_Book$2.mousePressed(Library_Book.java:56)
    at java.desktop/java.awt.AWTEventMulticaster.mousePressed(AWTEventMulticaster.java:288)
    at java.desktop/java.awt.Component.processMouseEvent(Component.java:6629)
    at java.desktop/javax.swing.JComponent.processMouseEvent(JComponent.java:3342)
    at java.desktop/java.awt.Component.processEvent(Component.java:6397)
    at java.desktop/java.awt.Container.processEvent(Container.java:2263)
    at java.desktop/java.awt.Component.dispatchEventImpl(Component.java:5008)
    at java.desktop/java.awt.Container.dispatchEventImpl(Container.java:2321)
    at java.desktop/java.awt.Component.dispatchEvent(Component.java:4840)
    at java.desktop/java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4918)
    at java.desktop/java.awt.LightweightDispatcher.processMouseEvent(Container.java:4544)
    at java.desktop/java.awt.LightweightDispatcher.dispatchEvent(Container.java:4488)
    at java.desktop/java.awt.Container.dispatchEventImpl(Container.java:2307)
    at java.desktop/java.awt.Window.dispatchEventImpl(Window.java:2772)
    at java.desktop/java.awt.Component.dispatchEvent(Component.java:4840)
    at java.desktop/java.awt.EventQueue.dispatchEventImpl(EventQueue.java:772)
    at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:721)
    at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:715)
    at java.base/java.security.AccessController.doPrivileged(Native Method)
    at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:85)
    at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:95)
    at java.desktop/java.awt.EventQueue$5.run(EventQueue.java:745)
    at java.desktop/java.awt.EventQueue$5.run(EventQueue.java:743)
    at java.base/java.security.AccessController.doPrivileged(Native Method)
    at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:85)
    at java.desktop/java.awt.EventQueue.dispatchEvent(EventQueue.java:742)
    at java.desktop/java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:203)
    at java.desktop/java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:124)
    at java.desktop/java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:113)
    at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:109)
    at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
    at java.desktop/java.awt.EventDispatchThread.run(EventDispatchThread.java:90)
Caused by: java.lang.ClassNotFoundException: sun.misc.Ref
    at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:583)
    at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178)
    at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521)
    ... 53 more

不可能僅僅指向新的引用。 棄用警告的含義不只是“我們以前稱為sun.misc.ref的現在被稱為java.lang.ref.SoftReference”。 整個API已更改。

您必須在源代碼中修復此問題並重新編譯。 我認為源代碼不可用? 那意味着您根本無法解決此問題。

如果必須運行此代碼,並且沒有其他選擇,請找到(過時的,因此不受支持的)JVM的舊版本,然后在該版本上運行它。 不要使用此VM運行隨機的Java東西(即,如果雙擊jar或其他東西,不要將其設置為默認VM),不要使用它訪問任意互聯網資源(即,不要使用此PDF查看器查看)網址),並且僅加載來自可信實體的PDF。 畢竟,如果庫或VM存在安全問題,則不會確認或解決它們。

對於它的價值,JDK8應該仍然具有sun.misc.ref;。 嘗試在上面運行。 甚至還支持JDK8變體,例如coretto 我將從這里開始,僅當您不能在JDK8上運行它時,才嘗試使用舊版VM。

搜索Java 11源代碼樹后,我發現Java 11中不再存在類sun.misc.Ref 。(不建議)不建議使用。 它已被完全刪除。 而且也沒有名為sun.misc.ref軟件包。

最重要的是,Acrobat API無法在Java 11上運行。您的選擇受到限制:

  • 在刪除之前,請使用Java的較早版本,直到該版本停止銷售為止。 Java 8或更早版本。
  • 嘗試找到與Java 11兼容的該API的較新版本。
  • 嘗試查找API的源並將其移植。
  • 查找替代API。
  • 從您的產品中刪除此功能。

(還有其他一些非常痛苦和/或冒險的想法……我不會提及。)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM