如何在java中使用不推荐的导入?

问题描述 投票:0回答:2

我有一个.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
java import deprecated
2个回答
2
投票

不可能只指向新的参考;弃用警告意味着不仅仅是'我们以前称之为sun.misc.ref现在称为java.lang.ref.SoftReference';整个API已经改变。

您必须在源代码中修复此问题并重新编译。我认为源代码不可用?这意味着你根本无法解决这个问题。

如果您必须运行此代码并且没有其他选择,请找到(过时的,因此不受支持的)旧版本的JVM并在其上运行它。不要使用这个VM运行随机java的东西(即如果你双击一个jar或什么不要使它成为默认的VM),不要用它访问任意的互联网资源(即不要使用这个PDF查看器来查看URL),并仅加载来自可信实体的PDF。毕竟,如果库或VM存在安全问题,则不会对其进行确认或修复。

对于它的价值,JDK8应该仍然有sun.misc.ref;试着跑吧。甚至还支持JDK8变体,例如coretto。我从那里开始,只有你不能在JDK8上运行它,尝试更老的VM。


1
投票

搜索Java 11源代码树告诉我,Java 11中不再存在类sun.misc.Ref。它不会(仅)弃用。它已被完全删除。并且没有名为sun.misc.ref的包。

底线是Acrobat API无法在Java 11上运行。您的选择有限:

  • 在删除之前使用旧版本的Java ...直到该版本进入EOL。 Java 8或更早版本。
  • 尝试找到与Java 11兼容的该API的更新版本。
  • 尝试找到API的源代码并移植它。
  • 寻找替代API。
  • 从您的产品中删除此功能。

(还有一些非常痛苦和/或冒险的其他想法......我不会提及。)

© www.soinside.com 2019 - 2024. All rights reserved.