2016-05-17 13 views
2

JAWSを使用するには、アプリケーション内のWordNetデータベースディレクトリの指定がここに記載されているように必要です:http://lyle.smu.edu/~tspell/jaws/WordNetデータベースディレクトリ.jarの相対パス

System.setProperty("wordnet.database.dir", "resources/WordNet-3.0/dict/"); 

これはIDE内でうまくいきます。しかし、.jarファイルにはコンパイルされません。したがって、.jarファイル内のWordNetディレクトリの相対パスが必要です。すでにさまざまなアプローチを試みました。最後は次のとおりです。

のjar::ファイル:/ C:.jarファイルからテストした結果としてあり

String url = this.getClass().getClassLoader() 
      .getResource("resources/WordNet-3.0/dict/index.sense").toExternalForm(); 
url = url.substring(0, url.length() - 12); 

!/file/path/jar.jar /resources/WordNet-3.0/dict/

これは解決策ですが、.jarが実行されてもディレクトリまたはindex.senseが見つからない場合があります。 index.senseはロードされると想定されます。

WordNetDatabase database = WordNetDatabase.getFileInstance(); 

指定されたディレクトリを使用します。いくつかの糸が見つかりましたが、働いている人の提案はありません。たとえば、次のように

How to get the path of a running JAR file? How to get a path to a resource in a Java JAR file Loading a file relative to the executing jar file

+0

こんにちは、同じ問題に直面しています。解決策を投稿したり、解決策を洗い出したりすることで助けてください。前もって感謝します。 – Ajaykumar

答えて

2

あなたは、WordNetのAPIで使用なし仮想ファイルシステムJARファイルにない経路が存在することはできません。そのため、生成しようとしているリソースURLの内部を知ることはできません。 WordNet APIはBufferedReaderにラップされたFileFileReaderを使用していますが、​​などのファイル名を開くことはできません。

代わりに行うことができるのは、プログラムが先ほどのようないくつかのjar XYZ内のリソースの位置を特定する方法を使用して正しいJARを見つけてから、XYZ JARファイルの関連する内容を一時キャッシュディレクトリそのキャッシュディレクトリのWordNet wordnet.database.dirシステムプロパティをポイントします。

使用しているJDKのバージョンによっては、JavaからJARを解凍する最適な方法に依存しますが、そこにはたくさんの例があります。

classpath:relative/path/in/jars形式のようなものを提供する場合は、使用するコード(JAWSライブラリ)をファイルの代わりにストリームから読み込むように変更する方法があります。wordnet.database.dirプロパティ。それ以外の場合は、ファイルとして扱います。そのライブラリ内のすべてのファイル読み込みを見つけて、正しいタイプの入力ストリームをラップするBufferedReaderを返す共通のユーティリティ関数でストリームの作成を置き換えてください。

+0

包括的な回答をいただきありがとうございます。 – n01dea

+0

こんにちはジェイソン、\t こんにちは、我々は同じ問題に直面している、私たちは問題を解決することはできません。ソリューションの詳細を説明することで助けてください。前もって感謝します。 – Ajaykumar