Jeg har lige holdt en lille pause med Java, men fik hurtigt lyst til at komme tilbage igen. :)
Jeg læser 3. Udgave af Objektorienteret programmering i Java af Jacob Nordfalk.
Jeg er nået til kapitel 4, hvor man skal lave noget med en terning, og hvor jeg får en fejl i en klasse, når jeg vil kompilere programmet, og jeg kan ikke lige helt se, hvordan jeg kan rette fejlen.
Her er min kode:
public class BenytTerning { public static void main (String[] arg) { Terning t; t = new Terning();
// Slå nu med terningen indtil vi får en sekser boolean sekser = false; int antalKast = 0;
while(sekser==false) { t.kast(); antalKast = antalKast + 1; System.out.println("kast "+antalKast+": "+t.værdi); if (t.værdi == 6) sekser = true; } System.out.println("Vi slog en 6'er efter "+antalKast+" slag."); } }
Som sagt, så kan jeg ikke lige helt se, hvad det er jeg gør galt, men det håber jeg, at jeg kan få svar på :)
E:\Java Projekter\BenytTerning\src\BenytTerning\BenytTerning.java:3: cannot find symbol symbol : class Terning location: class BenytTerning Terning t; E:\Java Projekter\BenytTerning\src\BenytTerning\BenytTerning.java:4: cannot find symbol symbol : class Terning location: class BenytTerning t = new Terning();
Synes godt om
Slettet bruger
01. marts 2007 - 21:03#3
Du skal sørge for at klassen Terning.java ligger i din classpath.
Det kan enten være at den er placeret i en package som du ikke har importeret. Eller det kan, som jjust næsten har ret i, være at din klasse Terning.class :) ikke er placeret i din classpath.
det selvfølgelig rigtig nok, men så kunne det være man skulle overveje at udskifte sin bog med en anden hvis det altså er sådan Jacob Nordfald lære fra sig:)
Det tvivler jeg dog på så vil skyde på det er fejl:)
/** En klasse der beskriver 6-sidede terninger */ public class Terning { /** antallet af øjne på den side på terningen, der vender opad lige nu */ public int værdi;
/** konstruktør der opretter en terning */ public Terning() { kast(); // kald kast() der sætter værdi til noget fornuftigt }
/** kaster terningen, så den får en anden værdi */ public void kast() { // find en tilfældig side double tilfældigtTal = Math.random(); værdi = (int) (tilfældigtTal * 6 + 1); }
/** giver en beskrivelse af terningen som en streng */ public String toString() { String svar = ""+værdi; // værdi som streng, f.eks. "4" return svar; } }
Terning.java har som sådan ikke noget at gøre i din classpath. Classpath er det sted JVM/JDK leder efter classes/resources der skal bruges når programmet køres og det samme når der compiles. Det din BenytTerning klasse skal bruge er Terning.class og ikke Terning.java.
mikkelbm: Nåå.. Jeg laver en .class ved at kompilere Terning.java, ikke sandt?
Og jeg bruger Netbeans 5.5 til at kompilere med, men hvis jeg vil kompilere Terning.java i Netbeans, så får jeg intet output, så jeg prøvede i kommando prompt:
Exception in thread "main" java.lang.NoClassDefFoundError: Terning <wrong name: Terning/Terning> at java.lang.ClassLoader.defineClass1<Native Method> at java.lang.ClassLoader.defineClass<Unknown Source> at java.security.SecureClassLoader.defineClass<Unknown Source> at java.net.URLClassLoader.defineClass<Unknown Source> at java.net.URLClasserLoader.access$100<Unknown Source> at java.net.URLClasserLoader$1.run<Unknown Source> at java.security.AccessController.doPriviliged<Native Method> at java.net.URLClassLoader.findClass<Unknown Source> at java.lang.ClassLoader.loadClass<Unknown Source> at java.
Aah ha.. Så rammer jeg selvfølgelig Send knappen.. Nå.. Jeg skriver den bare igen:
Exception in thread "main" java.lang.NoClassDefFoundError: Terning <wrong name: Terning/Terning> at java.lang.ClassLoader.defineClass1<Native Method> at java.lang.ClassLoader.defineClass<Unknown Source> at java.security.SecureClassLoader.defineClass<Unknown Source> at java.net.URLClassLoader.defineClass<Unknown Source> at java.net.URLClasserLoader.access$100<Unknown Source> at java.net.URLClasserLoader$1.run<Unknown Source> at java.security.AccessController.doPriviliged<Native Method> at java.net.URLClassLoader.findClass<Unknown Source> at java.lang.ClassLoader.loadClass<Unknown Source> at sun.misc.Launcher$AppClassLoader.loadClass<Unknown Source> at java.lang.ClassLoader.loadClass<Unknown Source> at java.lang.ClassLoader.loadClassInternal<Unkown Soruce>
Hvis jeg har mine .java filer til at ligge som NetBeans har lavet dem (Terning - E:\Java Projekter\Terning\src\Terning\Terning.java - BenytTerning - E:\Java Projekter\Terning\src\BenytTerning.java), så får jeg den samme fejl meddelse som før, ved kompileren af BenytTerning.java
Og hvis jeg har begge filer til at ligge i samme mappe, får jeg denne fejl meddelse: BenytTerning.java:3: cannot access Terning bad class file: .\Terning.class class file contains wrong class: Terning.Terning Please remove or make sure it appears in the correct subdirectory of the classpath. Terning t; ^
Hvordan skal filerne være placeret i forehold til hinanden, for at det fungerer?
Jeg har lige prøvet at kompilere BenytTerning i Netbeans, da jeg fandt ud af, at jeg har fået lavet en .class fil ved at kompilere i cmd.
Og når jeg kompilerer, får jeg denne fejl: "bad class file: E:\Java Projekter\Terning\src\Terning.java file does not contain class Terning Please remove or make sure it appears in the correct subdirectory of the classpath. Terning t;"
Så det må jo betyde, at jeg ikke har klassen 'Terning' i Terning.java Men hvad skal jeg så gøre, for at få det?
Kildekoden til Terning.java kan ses lidt længere oppe på siden. :)
"Jeg har lige prøvet at kompilere BenytTerning i Netbeans, da jeg fandt ud af, at jeg har fået lavet en .class fil ved at kompilere i cmd."
Der skulle der have stået: Jeg har lige prøvet at kompilere BenytTerning i Netbeans, da jeg fandt ud af, at jeg har fået lavet en .class fil til Terning.java ved at kompilere den i cmd.
Jeg havde det samme problem for noget tid siden, og den eneste måde jeg fik løst dette problem på var ved at skrive hele stien til det bibliotek som min java fil lå i. dvs.
javac -cp c:\"hele stien til mappen" klassensNavn.java
Jeg har tjekket min kode igennem en del gange nu, og der er ingen fejl i den.
Og jeg har Netbeans 5.5 som jeg for det meste bruger, men det er ikke altid at det vil kompilere korrekt, så når koden ikke fungerer som den skal i Netbeans, bruger jeg J2SE 5.0, og jeg har jo både problemer i Netbeans og i kommando prompt med den kode her?
Synes godt om
Slettet bruger
24. marts 2007 - 10:28#28
Du har selvfølgelig prøvet at lægge BenytTerning.java og Terning.java i samme folder og kompilere med javac *.java ??
Ja, det har jeg prøvet, og BenytTerning.java og Terning.java har altid lagt i samme folder.
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.