私はこの奇妙な問題に直面しています。
共有リソースとして別のマシンにあるファイルを読み込もうとしています:
\\remote-machine\dir\MyFileHere.txt
スタンドアロン アプリケーション (16 行の Java ファイル) を実行すると、問題なく動作します。しかし、サーバー「エンジン」から同じクラスと同じメソッドを使用して同じファイルを読み込もうとすると、「FileNotFoundException」が「FileNotFoundException」投げられます。
私はある種のアクセス許可になると思ったので、リソースをドライブとしてマップします: K:\
私のJavaファイルを再実行してください。読み取り、問題ありません。
「エンジン」内でJavaファイルを再実行します-> FileNotFoundException。
ファイルをローカル マシン ( C:\MyFileHere.txt ) にコピーすると、例外はスローされません。
質問
この FileNotFoundExcecption の原因は何ですか?
私はJava 1.5を使用しています
私の知る限り、このエンジンは Java をほとんど透過的に使用しています。
誰かが似たようなことに直面したことがありますか?
追加の質問ですか?これを回避するための良いアプローチは何でしょうか? これらのファイルを提供するTomcatのインストールについて考え始め、httpを介してそれらを読み取りますが、それは多すぎると思います. とにかく、私はソケットを開くことができないでしょう。
セキュリティマネージャーが原因である可能性があります(これまで使用したことはありませんが、存在することは知っています)
その場合、代わりに SecurityException がスローされませんか?
どうもありがとう。
編集
解決しました。スティーブ W さん、ありがとうございます。
このエンジンはZeroGの「LaunchAnywhere」で起動していることが判明。そのため、指定されたアプリで JVM を実行する .exe が作成されます。
このアプリケーション自体がランチャーです。エンジンを起動すると、どういうわけか(理由や方法がわかりません)JVMプロセスを所有するユーザーはSYSTEMです。Steve が指摘したように、このユーザーには NETWORK アクセス権がないため、共有リソースまたはマップされたドライブから読み取ることができません。
回避策 (メーカーに報告中) は、エンジンを手動で起動する .cmd ファイルを作成することです。手動で起動されるため、ユーザーはネットワークにアクセスできます。
SysInternals の「Process Explorer」を使用して、エンジン アプリの実行に使用されるコマンド ラインを正確に把握しました。
何という混乱!
回答を投稿してくれた人に感謝します。