我想将我的 eclipse 版本升级到最新版本,它还需要我升级 java 版本。升级后(java 15/eclipse 12-2020)我注意到我使用 freetts 的简单代码不适用于新配置。
我还有使用java 8的旧eclipse版本,所以我在旧版本和新版本中做了相同的步骤:创建java项目,添加所有相关的jar文件并设置简单的演示类。在旧版本中它工作正常,而在新版本中它会抛出异常:
Exception in thread "main" java.lang.NoClassDefFoundError: com/sun/speech/freetts/VoiceManager
at demoPackage.TextSpecchClass.<init>(TextSpecchClass.java:13)
at demoPackage.TextSpecchClass.main(TextSpecchClass.java:8)
Caused by: java.lang.ClassNotFoundException: com.sun.speech.freetts.VoiceManager
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:606)
at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:168)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:522)
... 2 more
基本上它似乎找不到 jars 文件,但我不确定为什么,以及它是否与新的 eclipse 版本或 java 升级有关。
*另请注意,在其他示例中,我使用了 sqllite 的外部 jar 并且它有效,因此它似乎没有发生在任何 jar 中,但某些特定于 freetts
jars: (possible some are redundant...):
cmu_time_awb.jar
cmu_us_kal.jar
cmudict04.jar
cmulex.jar
cmutimelex.jar
en_us.jar
freetts.jar
freetts-jsapi10.jar
jsapi.jar
mbrola.jar
package demoPackage;
import com.sun.speech.freetts.Voice;
import com.sun.speech.freetts.VoiceManager;
public class TextSpecchClass {
public static void main(String[] args) {
new TextSpecchClass("Hello worlds");
}
public TextSpecchClass(String words) {
System.setProperty("freetts.voices",
"com.sun.speech.freetts.en.us.cmu_us_kal.KevinVoiceDirectory");
Voice voice = VoiceManager.getInstance().getVoice("kevin16");
if (voice != null) {
voice.allocate();// Allocating Voice
try {
voice.setRate(190);// Setting the rate of the voice
voice.setPitch(150);// Setting the Pitch of the voice
voice.setVolume(3);// Setting the volume of the voice
voice.speak(words);// Calling speak() method
} catch (Exception e1) {
e1.printStackTrace();
}
} else {
throw new IllegalStateException("Cannot find voice: kevin16");
}
}
}