2016-04-29 7 views
1

Ich versuche, meinen Spracherkenner in eine Taschenrechner-App zu bringen, damit Blinde ihn benutzen können. Hier ist der Code:Implementierende Klasse in existierende Klasse

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

Und hier ist die Hauptschleife für die App:

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

Ich kann nicht scheinen, um sie zur gleichen Zeit laufen zu lassen, kann mir jemand helfen, dies herauszufinden, ?

+0

Wo ist Ihre Hauptklassendefinition? –

+0

Zu welcher Klasse gehört das 'main'? Wo ist die HelloWorld.main und was macht sie? Was ist 'Haupt'? – RealSkeptic

+0

@RealSkeptic Alle behoben – Luke

Antwort

1

Sie benötigen zwei verschiedene Threads. Main läuft im Swing-Thread und HelloWorld läuft in einem anderen Thread, z.B. Haupt-Bedroung.

Es ist mir noch unklar, wie sie kommunizieren würden. Wie auch immer, das ist, wie man sie in zwei verschiedenen Threads beginnen könnte:

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

Beachten Sie jedoch, dass dieser Code nicht Ihre Probleme lösen. Sie können über Swing Threading here lesen.

Verwandte Themen