我正面临这个奇怪的问题。
我正在尝试将位于另一台机器中的文件作为共享资源读取:
\\remote-machine\dir\MyFileHere.txt
当我运行一个独立的应用程序(一个 16 行的 java 文件)时,一切都很好。但是,当我尝试从服务器“引擎”(这是一个应用程序引擎,非常类似于可以运行 Java 程序的 Java EE 应用程序服务器)使用相同的类和相同的方法读取相同的文件时,“FileNotFoundException”被抛出。
我虽然我会获得某种权限,所以我将资源映射为驱动器:K:\
重新运行我的java文件,读取,很好。
在“引擎”-> FileNotFoundException 中重新运行我的 java 文件。
当我将文件复制到本地机器( C:\MyFileHere.txt )时,不会引发异常。
问题
什么可能导致此 FileNotFoundExcecption?
我正在使用 Java 1.5
据我所知,引擎几乎透明地使用了 java。
有人遇到过类似的事情吗?
附加问题?解决此问题的好方法是什么?我开始考虑为这些文件提供服务并通过http读取它们的tomcat安装,但我认为这太过分了,这就是为什么首先使用SMB协议不是吗?而且可能我无论如何都无法打开套接字。
安全管理器是否可能是原因(我以前从未使用过,但我知道它存在)
如果是这种情况,是否会抛出 SecurityException ?
非常感谢。
编辑
解决了。谢谢史蒂夫·W。
事实证明,这个引擎是用 ZeroG 的“LaunchAnywhere”启动的。因此,将创建一个 .exe,然后将运行具有指定应用程序的 JVM。
这个应用程序本身就是 Launcher。当它启动引擎时,以某种方式(我不知道为什么或如何)拥有 JVM 进程的用户是 SYSTEM。正如史蒂夫指出的那样,该用户没有网络访问权限,因此无法从共享资源或映射驱动器中读取。
解决方法(当我向制造商报告时)是创建一个 .cmd 文件来手动启动引擎。由于它将手动启动,因此用户确实可以访问网络。
我使用 SysInternals 的“Process Explorer”来准确了解用于运行引擎应用程序的命令行。
真是一团糟!
感谢那些发布答案的人。