我正面临着这个奇怪的问题。当文件存在时抛出FileNotFoundException
我试图读取位于在另一台机器作为共享资源文件:
\\remote-machine\dir\MyFileHere.txt
当我运行一个独立的应用程序(16行Java文件),一切都刚刚好。但是,当我尝试从服务器“引擎”(这是一个应用程序引擎,它非常像一个Java EE应用程序服务器,您可以在其中运行Java程序)中使用相同的类和方法来读取相同的文件时,“FileNotFoundException”被抛出。
我以为我是某种权限,所以我映射资源作为一个驱动器:K:\
重新运行我的Java文件,读取,罚款。
在“引擎” - > FileNotFoundException中重新运行我的java文件。
当我将文件复制到本地计算机(C:\ MyFileHere.txt)时,不会引发异常。
问题
什么可能会导致此FileNotFoundExcecption?
我使用Java 1.5
据我所知发动机几乎使用Java透明。
任何人都面临类似的东西?
其他问题?什么是解决这个问题的好办法?我开始考虑通过http服务这些文件并通过http读取它们的tomcat安装,但我认为这太多了,这就是为什么SMB协议首先是为了不是吗?无论如何,我可能无法打开套接字。
是否安全管理器可能是原因(我从来没有使用之前,但我知道它的存在)
Wound't一个SecurityException而不是抛出如果会出现这种情况?
非常感谢。
编辑
解决。谢谢Steve W.
事实证明,这个引擎是从ZeroG的“LaunchAnywhere”启动的。所以,一个.exe被创建,反过来将运行一个JVM与指定的应用程序。
这个应用程序它本身就是启动器。当它启动引擎时,以某种方式(我无法弄清楚为什么或如何)拥有JVM进程的用户是SYSTEM。正如Steve指出的那样,该用户没有NETWORK访问权限,因此无法从共享资源或映射驱动器读取数据。
解决方法(虽然我向制造商报告此问题)是创建一个.cmd文件以手动启动引擎。由于它将被手动启动,用户可以访问网络。
我已经使用SysInternals中的“Process Explorer”来确切地知道用于运行引擎应用程序的命令行。
什么是好消息!
感谢那些发布答案的人。
1stq:它的确如此。 2ndq:不是。第三不是服务,但仔细观察,启动程序以本地用户身份运行,但此启动程序(好)启动了其用户为SYSTEM的引擎应用程序(因此不允许使用网络): - /我是否看到此启动器可以启动应用程序不是作为系统? – OscarRyz 2009-01-28 04:53:36
我正在看“引擎”是从LaunchAnywhere(来自zerog)开始的,我不知道它是如何使用SYSTEM启动新VM的: -/ – OscarRyz 2009-01-28 05:13:47
这个答案给出了解决问题的提示。非常感谢。 – OscarRyz 2009-01-28 05:39:17