0

我正在构建一个 Eclipse 插件(一个注释插件,但它最终是一个 Eclipse 插件)。我的插件依赖的插件之一需要加载本机 dll。

问题是,这取决于此类 dll 在磁盘中的位置而失败。如果它长于某个阈值,我会收到以下错误

java.lang.UnsatisfiedLinkError: nlsxbe (The filename or extension is too long.) at java.lang.ClassLoader.loadLibraryWithPath(ClassLoader.java:952) at java.lang.ClassLoader.loadLibraryWithClassLoader(ClassLoader.java:921) at java. lang.System.loadLibrary(System.java:452) at lotus.domino.NotesThread.load(Unknown Source) at lotus.domino.NotesThread.checkLoaded(Unknown Source) at lotus.domino.NotesThread.sinitThread(Unknown Source) at com .atempo.adam.lotus.plugin.views.TopicView.createPartControl(TopicView.java:609)

我已经添加了 Path env var 的路径,并且还注册了 dll 无济于事。我的环境是 ms vista profesional、java1.5、eclipse3.4(和 lotus 8)

有人有线索吗?

提前谢谢了。

4

3 回答 3

1

我遇到过类似的问题,只需要确保文件不在长路径中。

有很多程序似乎存在长路径问题,包括一些内置的 Windows 程序。

您是否可以控制此 DLL 所在的位置?

于 2009-06-02T16:58:35.720 回答
1

这是 Windows MAX_PATH 限制的症状之一。有关于它的知识库注释(例如320081)和一些关于处理这些文件的手动方法的讨论,您可以使用 Google 轻松找到这些文件。

问题是 Windows 对用于各种系统和命令级调用的完整文件路径的长度有限制。尽管用户社区已经进行了很多讨论(甚至在 Microsoft KB 中尝试了一些新奇的东西),但它们都归结为您通过公平或错误的方式缩短了相关文件的文件路径。

以太坊中有一些迹象表明,Microsoft 的 Unicode API 允许(最多)32k 字节的文件路径,但我不知道这是否属实。但是,仍然存在许多现有程序不使用这些 API 并因此超出此限制的情况。(Windows API 甚至有可能使用 UTF16(或 UCS2),在这种情况下,这仅意味着 16k 个字符——有人知道吗?)

系统允许您通过多种方法创建“无法访问”的文件路径——一种是通过导航逐步创建路径中的步骤;另一个是挂载共享——有时系统功能和实用程序在内部依赖于完整的文件路径进行操作,这超出了这个限制。

除非从 Windows 系统代码中删除这个基本的愚蠢限制,否则唯一的办法就是移动和/或重命名文件……</p>

…或运行 Unix。

于 2009-06-24T10:36:46.427 回答
1

我尝试注册 dll 并将其移动到 c:\windows\system32(更短的路径),但我的 Lotus Notes 插件无法加载所需的库(Notes.jar)。

只有当我将 Lotus Notes 安装在比“c:\program files\IBM\lotus\Notes”更短的路径中时它才能正常工作。例如,如果我将它安装在“c:\Archivos de programa\IBM\lotus\Notes”中,它可以找到我的 dll,但无法加载库。

错误是:

GRAVE 无法创建视图 ID com.atempo.adam.lotus.plugin.views.TopicView: nlsxbe (文件名或扩展名太长。) ::class.method=unknown ::thread=main ::loggername=org.eclipse .ui.workbench

java.lang.UnsatisfiedLinkError: nlsxbe (The filename or extension is too long. )
at java.lang.ClassLoader.loadLibraryWithPath(ClassLoader.java:952)
at java.lang.ClassLoader.loadLibraryWithClassLoader(ClassLoader.java:921)
at java.lang.System.loadLibrary(System.java:452)
at lotus.domino.NotesThread.load(Unknown Source)
at lotus.domino.NotesThread.checkLoaded(Unknown Source)
at lotus.domino.NotesThread.sinitThread(Unknown Source)
at com.atempo.adam.lotus.plugin.views.TopicView.createPartControl(TopicView.java:639)
at org.eclipse.ui.internal.ViewReference.createPartHelper(ViewReference.java:332)
at org.eclipse.ui.internal.ViewReference.createPart(ViewReference.java:197)
at org.eclipse.ui.internal.WorkbenchPartReference.getPart(WorkbenchPartReference.java:566)
at org.eclipse.ui.internal.PartPane.setVisible(PartPane.java:290)
at org.eclipse.ui.internal.ViewPane.setVisible(ViewPane.java:525)
at org.eclipse.ui.internal.presentations.PresentablePart.setVisible(PresentablePart.java:140)
at com.ibm.rcp.ui.internal.presentations.FolderStackPresentation.selectPart(FolderStackPresentation.java:692)
at org.eclipse.ui.internal.PartStack.refreshPresentationSelection(PartStack.java:1144)
at org.eclipse.ui.internal.PartStack.createControl(PartStack.java:620)
at org.eclipse.ui.internal.PartStack.createControl(PartStack.java:532)
at org.eclipse.ui.internal.PartSashContainer.createControl(PartSashContainer.java:562)
at org.eclipse.ui.internal.PerspectiveHelper.activate(PerspectiveHelper.java:244)
at org.eclipse.ui.internal.Perspective.onActivate(Perspective.java:815)
at org.eclipse.ui.internal.WorkbenchPage.setPerspective(WorkbenchPage.java:3269)
at org.eclipse.ui.internal.WorkbenchPage.busySetPerspective(WorkbenchPage.java:956)
at org.eclipse.ui.internal.WorkbenchPage.access$12(WorkbenchPage.java:940)
at org.eclipse.ui.internal.WorkbenchPage$12.run(WorkbenchPage.java:3368)
at org.eclipse.swt.custom.BusyIndicator.showWhile(BusyIndicator.java:67)
at org.eclipse.ui.internal.WorkbenchPage.setPerspective(WorkbenchPage.java:3366)
at org.eclipse.ui.internal.Workbench.showPerspective(Workbench.java:2102)
at com.ibm.rcp.portal.app.ui.internal.serviceImpl.DoInternalUIService.openApplicationPerspective(DoInternalUIService.java:981)
at com.ibm.rcp.portal.app.ui.internal.serviceImpl.DoInternalUIService.openApplicationPerspective(DoInternalUIService.java:886)
at com.ibm.rcp.portal.app.ui.internal.serviceImpl.DoInternalUIService.openApplicationPerspectiveWithNavigator(DoInternalUIService.java:863)
at com.ibm.rcp.portal.app.ui.internal.serviceImpl.DoInternalUIService.access$12(DoInternalUIService.java:857)
at com.ibm.rcp.portal.app.ui.internal.serviceImpl.DoInternalUIService$8.run(DoInternalUIService.java:1197)
at org.eclipse.ui.internal.UILockListener.doPendingWork(UILockListener.java:155)
at org.eclipse.ui.internal.UISynchronizer$1.run(UISynchronizer.java:36)
at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:35)
at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:123)
at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:3659)
at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3296)
at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:1931)
at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:1895)
at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:423)
at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149)
at com.ibm.rcp.personality.framework.internal.RCPApplication.run(RCPApplication.java:72)
at org.eclipse.core.internal.runtime.PlatformActivator$1.run(PlatformActivator.java:78)
at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:92)
at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:68)
at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:400)
at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:177)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:64)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:615)
at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:549)
at org.eclipse.equinox.launcher.Main.basicRun(Main.java:504)
at org.eclipse.equinox.launcher.Main.run(Main.java:1236)
at org.eclipse.equinox.launcher.Main.main(Main.java:1212)
at org.eclipse.core.launcher.Main.main(Main.java:30)

谢谢。

于 2009-06-03T15:46:43.583 回答