Web サービスを使用して、リソース ファイルを使用している Java アプリケーション メソッドを呼び出す際の問題
Javaのsrcフォルダーに次のディレクトリ構造を含む1つのJavaアプリケーションを作成しました..
Src/
Transcriber.java
config.xml
digits.gram
transcriber.manifest
.aar ファイルを使用してこの Java アプリケーションの Web サービスを正常に作成し、axis2 サービス フォルダーに配置しました。
これ全体を、次の構造の Transcriber.aar ファイルにパッケージ化しています。
Transcriber\edu\cmu\sphinx\demo\transcriber
そして、私がリストした上記の4つのファイルすべてに。
上記の Transcriber.java クラスには 2 つのメソッドがあります。最初のメソッドは、config.xml、digits.gram、transcriber.manifest などの他のファイルを使用せずに処理するだけです。正常に動作し、アンドロイドからそのメソッドを簡単に呼び出すことができます。
しかし、私の 2 番目の方法では、必要なロジックを処理するために他のファイル (config.xml、digits.gram、transcriber.manifest など) も使用します。
しかし、2番目のメソッドを呼び出すとエラーが発生し、Androidデバイスからこの2番目のメソッドを呼び出すとエラーが発生します。
私のエラーは次のとおりです。
at java.lang.Thread.run(Thread.java:662)
Caused by: Property exception component:'jsgfGrammar' property:'grammarLocation'
- Can't locate resource:/edu/cmu/sphinx/demo/transcriber
edu.cmu.sphinx.util.props.InternalConfigurationException: Can't locate resource:
/edu/cmu/sphinx/demo/transcriber
config.xmlでこのコードを使用してconfig.xmlファイルを介して追加するために使用する文法ファイルdigits.gramを見つけることができないというエラーが表示されます
<component name="jsgfGrammar" type="edu.cmu.sphinx.jsgf.JSGFGrammar">
<property name="dictionary" value="dictionary"/>
<property name="grammarLocation"
value="resource:/edu/cmu/sphinx/demo/transcriber"/>
<property name="grammarName" value="digits"/>
<property name="logMath" value="logMath"/>
</component>
この種のエラーが発生するのはなぜですか?enter code here
最初にCONFIG.XMLを取得し、次にCONFIG.XMLを別のリソースファイルに取得した私のコード....config.xmlを正常に見つけましたが、config.xmlのコードは他のリソースファイルを見つけることができません
package edu.cmu.sphinx.demo.transcriber;
import edu.cmu.sphinx.frontend.util.AudioFileDataSource;
import edu.cmu.sphinx.recognizer.Recognizer;
import edu.cmu.sphinx.result.Result;
import edu.cmu.sphinx.util.props.ConfigurationManager;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL;
/** A simple example that shows how to transcribe a continuous audio file that has multiple utterances in it. */
public class TranscribeSimpleGrammar {
private static final String PATH = "file:///D:\\Sound\\";
@SuppressWarnings({ "null", "null" })
public String recognize_wave(String wavePath) throws MalformedURLException{
URL audioURL;
// if (args.length > 0) {
// audioURL = new File(args[0]).toURI().toURL();
// } else {
//audioURL = TranscribeSimpleGrammar.class.getResource("hello.wav");
//audioURL = new URL(PATH + "turn-on-light-kitchen-male.wav");
//audioURL = new URL(PATH + "turn-down-tv-volume-female.wav");
// audioURL = new URL(PATH + wavePath);
audioURL = new URL(wavePath);
//audioURL = new URL(PATH + "turn-down-dining-room-music-player-volume-male.wav");
// }
URL configURL = TranscribeSimpleGrammar.class.getResource("config.xml");
ConfigurationManager cm = new ConfigurationManager(configURL);
Recognizer recognizer = (Recognizer) cm.lookup("recognizer");
/* allocate the resource necessary for the recognizer */
recognizer.allocate();
// configure the audio input for the recognizer
AudioFileDataSource dataSource = (AudioFileDataSource) cm.lookup("audioFileDataSource");
dataSource.setAudioFile(audioURL, null);
// Loop until last utterance in the audio file has been decoded, in which case the recognizer will return null.
Result result;
while ((result = recognizer.recognize())!= null) {
String resultText = result.getBestResultNoFiller();
System.out.println(resultText);
}
return result.getBestResultNoFiller();
}
public String get_wav_byte(byte[] wavbite,String path){
String result1="null";
try
{
File dstFile = new File(path);
FileOutputStream out = new FileOutputStream(dstFile);
out.write(wavbite, 0, wavbite.length);
out.close();
}
catch (IOException e)
{
System.out.println("IOException : " + e);
}
try {
result1=recognize_wave(path);
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return result1;
}
}