将类实现到现有类中

时间:2016-04-29 07:09:47

标签: java

我正在尝试将我的语音识别器放入计算器应用程序,以便盲人可以使用它。这是代码:

public class HelloWorld {

    public static Recognizer recognizer;

    public static void init(String[] args) {
        try {
            URL url;
            if (args.length > 0) {
                url = new File(args[0]).toURI().toURL();
            } else {
                url = HelloWorld.class.getResource("helloworld.config.xml");
            }

            System.out.println("Loading...");

            ConfigurationManager cm = new ConfigurationManager(url);

            recognizer = (Recognizer) cm.lookup("recognizer");
            Microphone microphone = (Microphone) cm.lookup("microphone");


            /* allocate the resource necessary for the recognizer */
            recognizer.allocate();

            /* the microphone will keep recording until the program exits */
            if (microphone.startRecording()) {

                System.out.println
                    ("Say: (Good morning | Hello) " +
                    "( Bhiksha | Evandro | Paul | Philip | Rita | Will )");


                System.out.println
                    ("Start speaking. Press Ctrl-C to quit.\n");

                /*
                 * This method will return when the end of speech
                 * is reached. Note that the endpointer will determine
                 * the end of speech.
                 */ 

            }
        } catch (IOException e) {
            System.err.println("Problem when loading HelloWorld: " + e);
            e.printStackTrace();
        } catch (PropertyException e) {
            System.err.println("Problem configuring HelloWorld: " + e);
            e.printStackTrace();
        } catch (InstantiationException e) {
            System.err.println("Problem creating HelloWorld: " + e);
            e.printStackTrace();
        }
    }

    public static int convertToInt(String num){
        int tmp = 0;
        switch(num){

            case "one": tmp = 1; break;
            case "two": tmp = 2; break;
            case "three": tmp = 3; break;
            case "four": tmp = 4; break;
            case "five": tmp = 5; break;
            case "six": tmp = 6; break;
            case "seven": tmp = 7; break;
            case "eight": tmp = 8; break;
            case "nine": tmp = 9; break;
            default: tmp = -1;
        }
        System.out.print("The number is: " + tmp);
        return tmp;
    }

    public static int check(){
        Result result = recognizer.recognize();
        String resultText = "";
        if (result != null) {
            resultText = result.getBestFinalResultNoFiller();

            System.out.println("-"+resultText+"-");
            System.out.println("You said: " + resultText + "\n");
        } else {
            System.out.println("I can't hear what you said.\n");
        }
        return convertToInt(resultText);
    }
}

这是应用程序的主循环:

public static void main(String[] args) {
    HelloWorld.init(args);
    SwingUtilities.invokeLater( new Runnable() {
        public void run() {
            new Main();
            HelloWorld.check();
        }
    });   
}

我似乎无法让它们同时运行,任何人都可以帮我解决这个问题吗?

1 个答案:

答案 0 :(得分:1)

您需要两个不同的主题。 {4}在Swing线程中运行,Main在另一个线程中运行,例如主线。

我还不清楚他们将如何沟通。无论如何,这是你可以在两个不同的线程中启动它们的方式:

HelloWorld

但请注意,此代码不能解决您的问题。您可以阅读有关Swing线程here的信息。