如何在 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[=11=]0(Library_Book.java:22)
at screens.Library_Book.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.run(EventQueue.java:721)
at java.desktop/java.awt.EventQueue.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.run(EventQueue.java:745)
at java.desktop/java.awt.EventQueue.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
不可能只指向新的ref;弃用警告不仅仅意味着 'what we used to call sun.misc.ref is now called java.lang.ref.SoftReference';整个API都变了。
您必须在源代码中修复此问题并重新编译。我假设源代码不可用?那意味着你根本无法解决这个问题。
如果您必须 运行 此代码并且别无选择,请找到一个(过时且因此不受支持的)旧版本的 JVM 并 运行 它。不要使用此 VM 来 运行 随机 java 东西(即如果你双击一个 jar 或诸如此类的东西,不要将它设为默认 VM),不要用它访问任意互联网资源(即不要' 使用此 PDF 查看器查看 URL),并仅加载来自可信赖实体的 PDF。毕竟,如果库或 VM 存在安全问题,它们将不会被确认或修复。
不管怎样,JDK8 应该还有 sun.misc.ref;试试 运行ning 吧。甚至还有仍然支持的 JDK8 变体,例如 coretto。我会从那里开始,只有当你不能在 JDK8 上 运行 时,尝试更旧的 VM。
搜索 Java 11 源代码树告诉我 class sun.misc.Ref
不再存在于 Java 11 中。它没有(只是)被弃用。它已被完全删除。而且也没有名为 sun.misc.ref
的包。
底线是 Acrobat API 无法在 Java 11 上运行。您的选择是有限的:
- 在删除之前使用 Java 的旧版本...直到该版本停产。 Java 8 或更早。
- 尝试找到 API 的 Java 11 兼容的更新版本。
- 尝试找到 API 的来源并移植它。
- 寻找替代方案API。
- 从您的产品中删除此功能。
(还有其他一些非常痛苦和/或冒险的想法......我不会提及。)
我有一个 .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[=11=]0(Library_Book.java:22)
at screens.Library_Book.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.run(EventQueue.java:721)
at java.desktop/java.awt.EventQueue.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.run(EventQueue.java:745)
at java.desktop/java.awt.EventQueue.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
不可能只指向新的ref;弃用警告不仅仅意味着 'what we used to call sun.misc.ref is now called java.lang.ref.SoftReference';整个API都变了。
您必须在源代码中修复此问题并重新编译。我假设源代码不可用?那意味着你根本无法解决这个问题。
如果您必须 运行 此代码并且别无选择,请找到一个(过时且因此不受支持的)旧版本的 JVM 并 运行 它。不要使用此 VM 来 运行 随机 java 东西(即如果你双击一个 jar 或诸如此类的东西,不要将它设为默认 VM),不要用它访问任意互联网资源(即不要' 使用此 PDF 查看器查看 URL),并仅加载来自可信赖实体的 PDF。毕竟,如果库或 VM 存在安全问题,它们将不会被确认或修复。
不管怎样,JDK8 应该还有 sun.misc.ref;试试 运行ning 吧。甚至还有仍然支持的 JDK8 变体,例如 coretto。我会从那里开始,只有当你不能在 JDK8 上 运行 时,尝试更旧的 VM。
搜索 Java 11 源代码树告诉我 class sun.misc.Ref
不再存在于 Java 11 中。它没有(只是)被弃用。它已被完全删除。而且也没有名为 sun.misc.ref
的包。
底线是 Acrobat API 无法在 Java 11 上运行。您的选择是有限的:
- 在删除之前使用 Java 的旧版本...直到该版本停产。 Java 8 或更早。
- 尝试找到 API 的 Java 11 兼容的更新版本。
- 尝试找到 API 的来源并移植它。
- 寻找替代方案API。
- 从您的产品中删除此功能。
(还有其他一些非常痛苦和/或冒险的想法......我不会提及。)