2016-04-29 74 views
1

我试图将我的语音识别器放入计算器应用程序中,以便盲人可以使用它。下面是代码:将类实现到现有类中

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(); 
     } 
    }); 
} 

我似乎无法让他们在同一时间运行,任何人都可以帮我想出解决办法?

+0

您的主类定义在哪里? –

+0

'main'属于哪个类? 'HelloWorld.main'在哪里,它有什么作用?什么是“主”? – RealSkeptic

+0

@RealSkeptic全部修复 – Luke

回答

1

您需要两个不同的线程。运行在Swing线程中的Main和运行在另一个线程中的HelloWorld主线程。

目前还不清楚他们如何沟通。无论如何,这是你如何能在两个不同的线程启动:

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

但是请注意,这个代码将不会解决你的问题。你可以阅读关于Swing线程here