我正面臨着這個奇怪的問題。當文件存在時拋出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