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