我一直在创建一个Java程序,它在Eclipse中完美运行,完全没有错误。 当我将它编译成.jar并运行它时,我得到了这个错误:
java.lang.NullPointerException
at javaVoice.Speech.say(Speech.java:12)
at javaVoice.Respond.toText(Respond.java:58)
at javaVoice.GUI$2.actionPerformed(GUI.java:85)
at javax.swing.JTextField.fireActionPerformed(Unknown Source)
at javax.swing.JTextField.postActionEvent(Unknown Source)
at javax.swing.JTextField$NotifyAction.actionPerformed(Unknown Source)
at javax.swing.SwingUtilities.notifyAction(Unknown Source)
at javax.swing.JComponent.processKeyBinding(Unknown Source)
at javax.swing.JComponent.processKeyBindings(Unknown Source)
at javax.swing.JComponent.processKeyEvent(Unknown Source)
at java.awt.Component.processEvent(Unknown Source)
at java.awt.Container.processEvent(Unknown Source)
at java.awt.Component.dispatchEventImpl(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.KeyboardFocusManager.redispatchEvent(Unknown Source)
at java.awt.DefaultKeyboardFocusManager.dispatchKeyEvent(Unknown Source)
at java.awt.DefaultKeyboardFocusManager.preDispatchKeyEvent(Unknown Source)
at java.awt.DefaultKeyboardFocusManager.typeAheadAssertions(Unknown Source)
at java.awt.DefaultKeyboardFocusManager.dispatchEvent(Unknown Source)
at java.awt.Component.dispatchEventImpl(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Window.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
at java.awt.EventQueue.access$500(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue$4.run(Unknown Source)
at java.awt.EventQueue$4.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)
当我尝试使用voice.allocate()时,我完全确定这些错误来自FreeTTS。 (我用try / catch包围了代码以确保它在那里捕获了异常。) 这是Speech.java,导致错误的类。
package javaVoice;
import com.sun.speech.freetts.Voice;
import com.sun.speech.freetts.VoiceManager;
public class Speech {
public static void say(String toSay) {
try {
Voice voice;
VoiceManager voiceManager = VoiceManager.getInstance();
voice = voiceManager.getVoice(Main.speakVoice);
voice.allocate();
voice.speak(toSay);
}
catch (Exception e) {
System.out.println("Something went wrong while javaVoice tried to talk!");
if (Main.debugMode) {
e.printStackTrace();
}
}
}
public static void sayPrint(String toSay) {
try {
Voice voice;
VoiceManager voiceManager = VoiceManager.getInstance();
voice = voiceManager.getVoice(Main.speakVoice);
voice.allocate();
voice.speak(toSay);
System.out.println(toSay);
}
catch (Exception e) {
System.out.println("Something went wrong while javaVoice tried to talk!");
if (Main.debugMode) {
e.printStackTrace();
}
}
}
}
在调用任一方法时都会导致错误,并且错误行总是在voice.allocate();是。 如何让我的程序作为.jar文件工作,我做错了什么?!
答案 0 :(得分:1)
假设FreeTTS是一个你依赖的独立jar,你有两个选择:
java -cp .:path/to/your/jar/yourjar.jar:path/to/other/jar/FreeTTS.jar com.main.method.Class