Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: Java: nullpointer ongelma javax.speech kirjaston kanssa

Sivun loppuun

etsubu [27.11.2010 20:35:51]

#

Hei!
Olin koittanut saada "hello world!" esimerkin toimimaan javax.speech kirjaston avulla.
Koodi:

import javax.speech.*;
import javax.speech.synthesis.*;
import java.util.Locale;

public class HelloWorld {
	public static void main(String args[]) {
		try {
			// Create a synthesizer for English
			Synthesizer synth = Central.createSynthesizer(
				new SynthesizerModeDesc(Locale.ENGLISH));

			// Get it ready to speak
			synth.allocate();
			synth.resume();

			// Speak the "Hello world" string
			synth.speakPlainText("Hello, world!", null);

			// Wait till speaking is done
			synth.waitEngineState(Synthesizer.QUEUE_EMPTY);

			// Clean up
			synth.deallocate();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

virhe raportti:
java.lang.NullPointerException
at voiceoutput.voice.main(voice.java:14)

mikä avuksi?

(Mod. vaihtoi koodijava-tagit)

kayttaja-2499 [27.11.2010 20:45:57]

#

Tyhmiä kysymyksiä:
Oletko paljonkin koodaillut Javalla?
Minkä niminen on tiedosto mihin olet tallentanut antamasi koodin?
Entä minkälaisessa hakemistorakenteessa koodisi sijaitsee?
Onko tuossa kaikki tiedostossa oleva koodi?

etsubu [27.11.2010 20:52:52]

#

vastaus 1:Olen koodannut javalla noin 2 vuotta.
vastaus 2:käytän eclipse galileoa javan koodaamiseen ja tiedosto tyyppi mitä eclipse käyttää on JAVA
vastaus 3:eclipse hoitaa hakemistorakenteet kuntoon minun tarvitsee vain ajaa ohjelma
vastaus 4:ON paitsi että ohjelman aluusa on: package voiceoutput;

kayttaja-2499 [27.11.2010 20:57:31]

#

Eli tiedoston nimi on HelloWorld.java ja se ei sijaitse nimetyssä paketissa(package) vaan projektin lähdekoodihakemiston juuressa, vai?

etsubu [27.11.2010 21:01:28]

#

ohjelma sijaitsee polussa:
E:/workspace/voiceoutput/src/voiceoutput/voice.java
Se sijaitsee omassa java projektissa omassa pakkauksessa
Ja jos saan kysyä onko tällä sijainnilla nii suurta väliä sillä eclipse löytää sen. Itse luulisin, että koodissa on joku ongelma.

kayttaja-2499 [27.11.2010 21:06:14]

#

Kokeileppa huviksesi seuraavia muutoksia:
Muuta koodistasi luokan nimi HelloWorld:sta voice:ksi.
Ja lisää koodin alkuun rivi "package voiceoutput;".

package voiceoutput;
...
public class voice {
...

etsubu [27.11.2010 21:07:19]

#

ei auta ja edelleenkin onko polulla tässä nyt merkitystä jos koodissa valittaa nullpointteria ja eclipse kyllä löytää ohjelman ja voi ajaa sen joten ongelmaa ei ole polun kanssa

kayttaja-2499 [27.11.2010 21:13:34]

#

En osaa enempää auttaa.

Edelliseen vielä semmosta että Javassa tiedoston nimi pitää vastata luokan nimeen ja koodissa pitää kertoa, jos luokka sijaitsee packagessa.

etsubu [27.11.2010 21:16:01]

#

Juu tiedän olin sen korjannut jo, mutta olin ajatellut samalla että onkohan tuo kirjasto rikkinäinen kun rivi:

Synthesizer synth = Central.createSynthesizer(newSynthesizerModeDesc­(Locale.ENGLISH));

ilmeisesti palauttaa: null

kayttaja-2499 [27.11.2010 21:28:34]

#

Lueppa javadoccia, jos vaikka sieltä löytäisit vastauksen.

pake10 [28.11.2010 12:11:52]

#

etsubu kirjoitti:

Synthesizer synth = Central.createSynthesizer(newSynthesizerModeDesc­(Locale.ENGLISH));

Pitäisikö tämän olla näin?

Synthesizer synth = Central.createSynthesizer(new SynthesizerModeDesc(Locale.ENGLISH));

(eli väli tuossa)

Metabolix [28.11.2010 16:37:01]

#

kayttaja-2499, ehkä kannattaisi olla auttamatta, kun neuvoillasi ei ole mitään tekemistä kysymyksen kanssa.

pake10, aluperäisessä viestissä on ihan oikea koodi, ja sitä paitsi tuollainen virhe ei mitenkään järkevästi voisi selittää NullPointerExceptionia, vaan seurauksena pitäisi olla, ettei koodi edes käänny.

etsubu, mistä latasit kirjaston ja millä ohjeilla asensit sen?

etsubu [04.12.2010 20:55:51]

#

latasin sen osoitteesta:http://sourceforge.net/projects/freetts/files/
ohjeet sivulta:http://www.ryan-h.com/uncategorized/java-speech-jsapi-freetts/
en ymmärtänyt sivun ohjeita 100% joten saatoin tehdä jotain ehkä väärinkin

Metabolix [04.12.2010 23:31:04]

#

Yritäpä ensin saada paketin mukana tuleva HelloWorld.jar ajettua. Sain sen toimimaan, kun laitoin jarit ja tiedoston speech.properties oikeaan paikkaan. Luultavasti vika on sinullakin tuossa tiedostossa speech.properties. (Linuxin käyttäjänä en pysty auttamaan sijoittelussa enempää. Kokeile ohjeessa ehdotettua paikkaa ja muita hakemistoja siinä lähistöllä.)

Tuon jälkeen sain myös sinun koodisi näennäisesti toimimaan. Ääni kuitenkin kuului vasta, kun muutin alkupuolelta SynthesizerModeDesc-olion luomisen samanlaiseksi kuin FreeTTS:n mukana tulevassa HelloWorld-esimerkissä:

new SynthesizerModeDesc(null, "general", Locale.ENGLISH, null, null)

etsubu [05.12.2010 15:46:47]

#

Kiitoksia kovasti!!!!! Enköhän saa sen toimimaan noilla neuvoilla.


Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta