package javaapplication18; import java.awt.*; import java.awt.event.*; import javax.swing.*; public class NewJApplet extends JApplet { @Override public void init() { setLayout(new GridLayout(1,1)); JButton kokeile = new JButton("Kokeile"); kokeile.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { starttaa(); } }); add.(kokeile); } private void starttaa() { //Koodia. System.exit(0); } }
add.(kokeile); rivillä on virhe identifier expected .
Mikä edes on tuo identifier?
Siitä on monia keskusteluja netissä mutta tapaukset ovat erilaisia.
Kaiken kukkuraksi koodi on kirjasta.
Oisko siinä piste liikaa.. add(kokeile)
Okei, joka tapauksessa mitä tuo virhe tarkoittaa?
Se tarkoittaa, että koodissa on kirjoitusvirhe. Pisteen jälkeen pitäisi tulla tunniste, mutta sitä ei tulekaan vaan tuleekin sulkumerkki. Siis tuollaista tarvittaisiin, että se olisi edes syntaksiltaan oikea. add on ilmeisesti metodi, joten sille ei käytännössä voisi edes antaa pistettä ja tunnistetta, mutta kääntäjä ilmeisesti tarkistaa syntaksivirheet ensin ja muut virheet vasta kun se on saanut syntaksista selvää.
(Joku joka osaa javaa saa korjata jos meni pieleen :D )
Identifier on suomeksi tunniste eli muuttujan, funktion tai muun nimi.
Koko virheilmoitushan näyttää tältä:
NewJApplet.java:19: error: <identifier> expected add.(kokeile); ^
Tässä ^-merkki osoittaa, missä kohti virhe tarkalleen on: pisteen jälkeen. Javassa pisteen jälkeen tulee lähes poikkeuksetta tunniste.
Grez on oikeassa Java-kääntäjän toiminnasta: ensin syntaksi, sitten muut virheet. Niinpä kääntäjä ei osaa sanoa, että virhe on ylimääräinen piste, vaan kääntäjä hyväksyy pisteen, joka voisi toisessa tilanteessa ollakin oikein, ja löytää virheen vasta seuraavasta sulkumerkistä.
Vastaavasti jos pisteen perään lisää tunnisteen, saadaan toisenlainen virhe: ennen pistettä täytyy olla muuttuja eikä metodin nimi, joten kääntäjä ilmoittaa, että ei ole olemassa add-nimistä muuttujaa.
NewJApplet.java:19: error: cannot find symbol add.jotain(kokeile); ^ symbol: variable add location: class NewJApplet
Kannattaa muuten käyttää jotain esimerkiksi netistä löytyvää sanakirjaa jos on vaikeuksia ymmärtää virheviestejä yms. Vaikkapa http://ilmainensanakirja.fi/
Mod. yhdisti keskustelut. Uusi otsikko: Painike ei toimi
Panin ohjelman ja html:n webhotelliin mutta ruudulla on pelkkää valkoista.
Omalla koneella painikketta ei ole, vaan punainen kehys jossa lukee "Virhe. Lisätietoja..." ja ikkuna jossa lukee "Ohjelman suorittaminen epäonnistui." . (Safari ja Mac os x lion)
Java-konsolissa lukee tämä.
java.lang.NoClassDefFoundError: peli (wrong name: sovelma/NewJApplet) at java.lang.ClassLoader.defineClass1(Native Method) at java.lang.ClassLoader.defineClassCond(ClassLoader.java:631) at java.lang.ClassLoader.defineClass(ClassLoader.java:615) at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:141) at sun.plugin2.applet.Applet2ClassLoader.findClass(Applet2ClassLoader.java:247) at sun.plugin2.applet.Plugin2ClassLoader.loadClass0(Plugin2ClassLoader.java:249) at sun.plugin2.applet.Plugin2ClassLoader.loadClass(Plugin2ClassLoader.java:179) at sun.plugin2.applet.Plugin2ClassLoader.loadClass(Plugin2ClassLoader.java:160) at java.lang.ClassLoader.loadClass(ClassLoader.java:247) at sun.plugin2.applet.Plugin2ClassLoader.loadCode(Plugin2ClassLoader.java:678) at sun.plugin2.applet.Plugin2Manager.createApplet(Plugin2Manager.java:3045) at sun.plugin2.applet.Plugin2Manager$AppletExecutionRunnable.run(Plugin2Manager.java:1497) at java.lang.Thread.run(Thread.java:680) Poikkeus: java.lang.NoClassDefFoundError: peli (wrong name: sovelma/NewJApplet)
Luultavasti kirjoittamasi HTML-koodi on viallinen: käsket ladata luokan peli, vaikka pitäisi ladata luokka sovelma/NewJApplet.
Pitäisikö ohjelman olla sovelma kansiossa?
Olisi varmaan myös koodin selkeyden takia mukavaa jos käytettäisi sisennyksiä...
Kiitos, sain nyt ohjelman toimimaan.
Aihe on jo aika vanha, joten et voi enää vastata siihen.