Oon lueskellu ympäri nettiä ja jollain muillaki on ollu samat ongelmat ku mulla. Käytin aluksi NetBeansia mutta sitten halusin luopua siitä, koska se on liian ohjaistava ja ahtaan näkönen vaikka käänsikin ohjelmat nätisti.
Mutta nyt ku käytän Crimsonia niin kääntäminen kyllä onnistuu, mutta ohjelmat ei oikee osaa lukee saman paketin muita luokkia.
// test/Test.java package testing; public class Test{ public static void main(String[] args){ System.out.println(Lue.rivi()); } }
// test/Lue.java package testing; import java.io.*; public class Lue { // (lyhennetty, rivi() metodi kyllä löytyy seasta...) }
Kun käännän test-kansiossa komennolla: javac *.java. Niin se kääntää nätisti kaiken, mutta sitten Test.class ohjelman suorituksessa se antaa virheen:
java.lang.NoClassDefFoundError: Test (wrong name: testing/Test) at java.lang.ClassLoader.defineClass1(Native Method) at java.lang.ClassLoader.defineClass(ClassLoader.java:620) at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:124) at java.net.URLClassLoader.defineClass(URLClassLoader.java:260) at java.net.URLClassLoader.access$000(URLClassLoader.java:56) at java.net.URLClassLoader$1.run(URLClassLoader.java:195) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(URLClassLoader.java:188) at java.lang.ClassLoader.loadClass(ClassLoader.java:306) at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:276) at java.lang.ClassLoader.loadClass(ClassLoader.java:251) at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:319) Exception in thread "main"
Mutta jos käännän sit yksitellen: javac -classpath (polku) Test.java, niin se antaa virheeksi:
Test.java:5: cannot find symbol symbol : variable Lue location: class testing.Test System.out.println(Lue.rivi()); ^ 1 error
Mitäs hemmettiä? Oon kyl koittanu vähä kaikenlaista muttei meinaa saada oikee toimiin :S
Samasta aiheesta: http://pages.cs.wisc.edu/~hasti/cs368/
Onko kaikki kooditiedostot pakettien nimien mukaisissa hakemistoissa? Onko javac:n classpath varmasti asetettua tuon sinun koodipuun juureen (testing hakemiston ylähakemistoon)?
Ajettaessa luokkaa pitää myös asettaa classpath (cp) koodihakemiston juureen. Myöstaakseni paketin sisällä olevaa luokkaa ajettaessa piti vielä sanoa paketin nimi siinä alussa, olikohan se nyt "java -cp path testing.Test" vai testing/Test, en ole noita vähään aikaan komentoriviltä ajanut.
Käytä vaan sitä IDEä oli se sitten NetBeans tai Eclipse. Elämä on näin helpompaa :)
Voit myös vain luoda projektin NetBeansilla, ja käyttää sen kääntämiseen NetBeansin luomaa ant-skriptiä.
Njooh. Totta, jos iha suosiolla sit käyttäs NetBeansia. Ajattelin vaan, että nyt ku rupeen harjottelemaan javaa, niin olisi opetella ne ulkoo enemmän ku netbeans aina syöttää kaikki puoli valmiiksi =/
Aihe on jo aika vanha, joten et voi enää vastata siihen.