Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: Java: packagen luokat eivät pysy kasassa

irwinace [12.05.2008 23:15:53]

#

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/JavaTutorial/NOTES/Packages.html

FooBat [13.05.2008 02:48:38]

#

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 :)

Blaze [13.05.2008 08:11:17]

#

Voit myös vain luoda projektin NetBeansilla, ja käyttää sen kääntämiseen NetBeansin luomaa ant-skriptiä.

irwinace [13.05.2008 12:18:32]

#

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 =/

Vastaus

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

Tietoa sivustosta