2

Windows 7 で Java でデスクトップ プログラムを作成し、 HKEY_CURRENT_USER/Software/Microsoft/Windows/CurrentVersionの jar ファイルのパス (C:\Users\User\Documents\My App.jar のようなもの) をレジストリに書き込むことで、起動時にハングさせました。/ブランチを実行します。私のプログラムが Windows でロードされるとき、プログラムと同じフォルダーに配置されたテキスト ファイルをロードする必要があります。

File f = new File("text.txt"); // without full path to file
if(!f.exists())
    JOptionPane.showMessageDialog(null, "File not found: " + f.getAbsolutePath());

しかし、それができず、「ファイルが見つかりません: C:\Windows\system32\text.txt」というメッセージが表示されます。このプログラムは、system32フォルダーとテキスト ファイルにもそれぞれ配置されているように見えます。私は何を間違えましたか?

4

4 に答える 4

2

私の理論: 従来のインストーラーを介して Windows 用の Java をインストールした場合、(標準的には) 配置するように指示した場所に加えて、インストーラーはディレクトリにJAVA_HOMEa をドロップするため、JVM を起動するときにstartupは作業ディレクトリであり、指定したような相対パス名を持つファイルを探す場所です。java.exesystem32system32

最も簡単な解決策は、コード内でテキスト ファイルへの絶対パスを指定することです。また、実行しているバージョンを保証できるようjava.exeに、レジストリ キーにへのフル パスを指定することをお勧めします (現在はパスがないだけだと思います)。java.exeJavaの複数のバージョンがインストールされている場合、最近インストールされたバージョンのみが含まjava.exeれ、修飾パスがなくても、その時点ではおそらく最小になるsystem32ので、それが取得しているものだと思います。PATH

締めくくりとして、あなたの問題とは関係ありませんが、JavaがWindowsでこれを行い、そのコピーをすぐに消去してから、必要なバージョンがオンデマンドで実行されるバージョンであることを確認するようにjava.exe設定するのは嫌いです。PATH

于 2013-09-12T18:23:50.027 に答える
0

参照しているパスは作業ディレクトリであり、アプリケーションがインストールされている場所ではありません。ショートカットを配置した場合と同様に、作業ディレクトリを変更すると、得られる結果が変更されます。しかし、自動的に起動するようにすると、おそらくWindowsがこれを作業ディレクトリとして設定しています。

そのように: レジストリを使用してプログラムを起動し、現在の作業ディレクトリも変更しますか? 1

レジストリのコマンド ライン パラメーターを使用して、ファイル ディレクトリをアプリに渡すことができます。


1 - これで問題が解決することはないでしょう。

于 2013-09-12T18:32:54.697 に答える
0

@Omahaの回答は、何が起こっているかを説明していると思います(system32ディレクトリからjava.exeを起動しています-JREインストーラーは、ユーザーがアクセスしやすくするためにsystem32にjava.exeのコピーを配置します)。

状況に対する実際の解決策は、CurrentVersion\Run レジストリ エントリを調整して、アプリケーションの既定の作業フォルダを指定することです。チェックアウト:レジストリを使用してプログラムを起動し、現在の作業ディレクトリも変更しますか?

于 2013-09-13T05:15:34.230 に答える
0

現在の作業ディレクトリを取得し、それをファイルへの絶対パスの一部として使用する必要があります。

この質問を見てください: Java で現在の作業ディレクトリを取得する

他の回避策は、説明したこのレジストリキーを読み取り、この情報を使用して目的のパスからファイルを読み取ることです-Javaを使用してWindowsレジストリに読み取り/書き込みを行います

于 2013-09-12T18:24:25.950 に答える