4

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;


     }




}
4

1 に答える 1

1

変えようとしたことはありますか

<property name="grammarLocation" value="resource:/edu/cmu/sphinx/demo/transcriber"/>

<property name="grammarLocation" value="resource:edu/cmu/sphinx/demo/transcriber"/>

(前の先頭のスラッシュを削除することを意味しeduます)?

Class.getResource()ClassLoader.getResource()提供された名前を別の方法で解釈します。リソースを検索しますが、同じリソースを検索するには引数Class.getResource( "/edu/cmu/sphinx/demo/transcriber/transcriber.manifest" )を使用する必要があります。他のリソースをロードするために呼び出すライブラリ コードでどのメソッドが使用されているかわからないため、試してみてください。ClassLoader.getResource()"edu/cmu/sphinx/demo/transcriber/transcriber.manifest"

于 2013-09-28T16:46:05.997 に答える