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