December 7, 2002
har ett litet frustrerande problem här som ajg hoppas att någon kan hjälpa mig med.
håller på och gå igenom en tutorial i java programering på java.sun.com ( http://developer.java.sun.com/...../page8.jsp )
men när jag ska kompilera min DiveLod.java fil till en klass fil blir det bara strul. Min källkods fil ligger under C:/Java/DiveLog/test. När jag skriver denna kompilerings rad;
javac -classpath C:Javatest DiveLog.java
så får jag detta meddelande;
DiveLog.java:60: cannot resolve symbol
symbol : class Welcome
location: class divelog.DiveLog
new Welcome(),
^
DiveLog.java:66: cannot resolve symbol
symbol : class Diver
location: class divelog.DiveLog
new Diver(),
^
DiveLog.java:71: cannot resolve symbol
symbol : class Dives
location: class divelog.DiveLog
new Dives(),
^
DiveLog.java:76: cannot resolve symbol
symbol : class Statistics
location: class divelog.DiveLog
new Statistics(),
^
DiveLog.java:81: cannot resolve symbol
symbol : class WebSite
location: class divelog.DiveLog
new WebSite(),
^
DiveLog.java:85: cannot resolve symbol
symbol : class Resources
location: class divelog.DiveLog
new Resources(),
^
dom klasserna har jag skapat och dom ligger i samma mapp. vad är fel?
May 8, 2001
När jag kollade på den tutorial som du använt så har de angett att filen/filerna ligger i paketet "divelog". Det gör man för att få lite ordning och reda och slippa namnkonflikter. Om man vill använda en klass som ligger i ett paket så importerar man den med en importsats t.ex. "import divelog.DiveLog" eller "import divelog.*" (behöver man inte göra om de ligger i samma paket).
Nu till ditt problem: Det verkar som om du har lagt dina klasser i en katalog som heter "test". Det är inte så bra eftersom klasserna måste ligga i en katalog eller kataloger som heter likadant som de paket de ingår i. (Ska följa paketstrukkturen) I ditt fall ska de ligga i en katalog som heter "divelog". Använd små bokstäver i katalognamnet. Vet inte om java under windows bryr sig men det kommer definitivt att spela roll om du kör under Unix/Linux eftersom den skiljer på stora/små bokstäver.
Om du lägger klasserna i katalogen "C:/Java/DiveLog/test/divelog" så tror jag att du kompilerar på följande sätt:
C:/Java/DiveLog/test/>javac -classpath C:/Java/DiveLog/test/ divelog/DiveLog.java
eller
C:/Java/DiveLog/test/divelog> javac -classpath C:/Java/DiveLog/test/ DiveLog.java
Jag föredrar det första alternativet eftersom man inte står i sin paketstruktur då.
"-classpath" anger alltså sökvägen till den paketstruktur som klassen ligger i. I exemplet ovan så är det ju katalogen "test" eftersom den innehåller på paketet "divelog"
Detsamma gäller sedan när du ska starta programmet:
C:/Java/DiveLog/test/>java -classpath C:/Java/DiveLog/test/ divelog.DiveLog
Eftersom du ska starta med klassen DiveLog vilken ligger i paketet "divelog".
Hoppas att det inte smugit sig in alltför många fel här nu då jag inte testat att kompilera/exekvera detta själv... Men jag hoppas att det hur som helst ska hjälpa dig att få igång programmet!
Lycka till!
Desktop: Gigabyte GA-MA770-DS3 | AMD Phenom II 955 BE | 8GB PC6400 | Samsung 1TB + 500GB | Powercolor HD3870
3DMark 2006: 11932 3DMark Vantage: P5137
Laptop: Macbook Pro 2012 | 8GB | Samsung 830 128GB SSD
HTPC: Mac Mini | 3GB | 500GB
December 7, 2002
jonaz wrote: När jag kollade på den tutorial som du använt så har de angett att filen/filerna ligger i paketet "divelog". Det gör man för att få lite ordning och reda och slippa namnkonflikter. Om man vill använda en klass som ligger i ett paket så importerar man den med en importsats t.ex. "import divelog.DiveLog" eller "import divelog.*" (behöver man inte göra om de ligger i samma paket).
Nu till ditt problem: Det verkar som om du har lagt dina klasser i en katalog som heter "test". Det är inte så bra eftersom klasserna måste ligga i en katalog eller kataloger som heter likadant som de paket de ingår i. (Ska följa paketstrukkturen) I ditt fall ska de ligga i en katalog som heter "divelog". Använd små bokstäver i katalognamnet. Vet inte om java under windows bryr sig men det kommer definitivt att spela roll om du kör under Unix/Linux eftersom den skiljer på stora/små bokstäver.
Om du lägger klasserna i katalogen "C:/Java/DiveLog/test/divelog" så tror jag att du kompilerar på följande sätt:
C:/Java/DiveLog/test/>javac -classpath C:/Java/DiveLog/test/ divelog/DiveLog.java
eller
C:/Java/DiveLog/test/divelog> javac -classpath C:/Java/DiveLog/test/ DiveLog.java
Jag föredrar det första alternativet eftersom man inte står i sin paketstruktur då.
"-classpath" anger alltså sökvägen till den paketstruktur som klassen ligger i. I exemplet ovan så är det ju katalogen "test" eftersom den innehåller på paketet "divelog"
Detsamma gäller sedan när du ska starta programmet:
C:/Java/DiveLog/test/>java -classpath C:/Java/DiveLog/test/ divelog.DiveLog
Eftersom du ska starta med klassen DiveLog vilken ligger i paketet "divelog".
Hoppas att det inte smugit sig in alltför många fel här nu då jag inte testat att kompilera/exekvera detta själv... Men jag hoppas att det hur som helst ska hjälpa dig att få igång programmet!
Lycka till!
det är fortfarande exakt samma problem. 😕
December 7, 2002
jag använder XPpro och på suns hemsida stod det att man skyulle lägga till en miljö variabel, kontrollpanelen>system>avancerat>miljövariabel
jag la till denna rad i "path" variabeln;
set PATH=%PATH%;C:jdk1.3.1_06bin;
kan det vara fel på den?? det verkar ju iaf som att mina -classpath intruktioner inte fungerar vid kompilering!
jag testade även med dessa strängar:
set PATH=%C:jdk1.3.1_06bin%;C:jdk1.3.1_06bin;
set PATH=%C:jdk1.3.1_06bin%:C:jdk1.3.1_06bin;
men ingenting fungerade (om det nu är fel på min miljö variabel).
en till sak som jag kom att tänka på är att jag instalerade JBuilder INNAN jag laddade ner Java SDK1.3.1 (har nu uppdaterat till 1.4.1 men det hjälpte inte!)
kan det ha med JBuilder att göra? för där ligger det ju iaf en javakompilator av version 1.3.1 i dess mapp.
jag behöver all hjälp jag kan få, för annars dumpar jag Java för gott (orka koda om kompilatorn ändå inte fungerar!?!)
May 8, 2001
Ge inte upp än!
PATH sätter du för att OS ska hitta "verktygen" för att t.ex. kompilera. Dessa ligger i bin-katalogen som du har pekat ut. Verkar ju fungera eftersom du kan köra "javac" och "java", den hittar ju dessa program!
Skulle gärna vilja att du beskrev igen hur du gör när du ska kompilera:
* Sökväg till .java filer (hela)
* Paket som klasserna ligger i (alltså vad som står efter package i java-filen, om det är olika eller om den raden saknas i någon fil ange detta)
* Sökväg varifrån du försöker kompilera (hela)
* Vad du skriver när du försöker kopilera
Om du besvarar ovanastående ska vi nog kunna lösa detta!
Desktop: Gigabyte GA-MA770-DS3 | AMD Phenom II 955 BE | 8GB PC6400 | Samsung 1TB + 500GB | Powercolor HD3870
3DMark 2006: 11932 3DMark Vantage: P5137
Laptop: Macbook Pro 2012 | 8GB | Samsung 830 128GB SSD
HTPC: Mac Mini | 3GB | 500GB
December 7, 2002
jonaz wrote: Ge inte upp än!
PATH sätter du för att OS ska hitta "verktygen" för att t.ex. kompilera. Dessa ligger i bin-katalogen som du har pekat ut. Verkar ju fungera eftersom du kan köra "javac" och "java", den hittar ju dessa program!
Skulle gärna vilja att du beskrev igen hur du gör när du ska kompilera:
* Sökväg till .java filer (hela)
* Paket som klasserna ligger i (alltså vad som står efter package i java-filen, om det är olika eller om den raden saknas i någon fil ange detta)
* Sökväg varifrån du försöker kompilera (hela)
* Vad du skriver när du försöker kopileraOm du besvarar ovanastående ska vi nog kunna lösa detta!
det värmer att du vill hjälpa mig!
till saken;
sökvägen till filerna är. C:JavaDiveLogDiveLog
paketet heter divelog och det står
package divelog;
innan varje ny klassdeklaration i ALLA klasser.
jag undersökte lite nu här och ändrade namnet i paket deklarationen till;
package DiveLog;
ist för;
package divelog;
dvs jag har samma versaler som i mappen där filerna ligger (DiveLog) och fick ett litet spännande resultat denna gången.
tillskillnad mot sist då jag då fick sex errors så får jag detta meddelande;
C:JavaDiveLog>javac -classpath C:/Java/DiveLog/ DiveLog.java
DiveLog.java:74: cannot access DiveLog.Welcome
bad class file: C:JavaDiveLogDiveLogWelcome.class
class file contains wrong class: divelog.Welcome
Please remove or make sure it appears in the correct subdirectory of the classpa
th.
tabbedPane.addTab("Welcome", null, new Welcome(), "welcome to the Dive L
og");
^
1 error
känns som att man är på rätt väg elle?? iaf så vet jag inte vad som nu är felet, men vi har iaf reducerat antalet fel, verkar vara strul emd Welcome klassen bara =/
jag ser ett ljus nu, kanske kan man ändå fixa till detta så jag kan ta upp programeringen igen efter två veckors svala!
edit* filerna jag testade döpa om paket deklarationen ligger under mappen C:/Java/DiveLog
med kompilerings koden;
C:JavaDivelog>javac -classpath C:/Java/DiveLog/ DiveLog.java
May 8, 2001
Kul att det går åt rätt håll!
Till att börja med så ändrade du på fel ställe, spelar nog ingen roll i detta fall men man använder oftast små bokstäver i paketnamnen. Ändra alltså mappen till "divelog" istället! (Och ändra tillbaka i package-satsen)
Nu till det riktiga problemet vilket är att du nog står i del katalog...
För att stå i en annan katalog när du kompilerar så måste du använda -sourcepath men jag tycker att vi lämnar det så länge. Den första filen kompilerar eftersom du står i "DiveLog" katalogen så hittar den ju DiveLog.java som ligger i denna katalog.
När den sen försöker kompliera Welcome.java så tittar den i ":/Java/DiveLog/Divelog"... Detta för att det i filen är angett att den ska ligga i paketet "DiveLog", därav det andra DiveLog i sökvägen.
LÖSNINGEN!
C:Java>javac -classpath C:/Java/ divelog.DiveLog.java
eller ännu hellre om du byter till små bokstäver:
C:Java>javac -classpath C:/Java/ divelog.DiveLog.java
Observera att classpath inte är satt till till katalogen som filerna ligger i utan till katalogen som innehåller början på paketstrukturen, alltså "Java". I den katalogen ligger sedan dina filer i rätt paketstruktur vilket i detta fall är "divelog"
Nu kommer (förhoppningsvis) kompilatorn att hitta divelog.Welcome eftersom du nu utgår från "C:Java" och därifrån så kommer man ju åt "divelog/Welcom.java"!
Är inte helt lätt att förstå det här med paket men det är mkt bra för att hålla koll på många filer + att klasser kan ha samma namn utan att det blir knas.
Har man t.ex. två klasser:
se.test.beta.MyClass
se.test.release.MyClass
så kan man i de klasser som använder dessa antingen ange:
import se.test.beta.MyClass;
eller
import se.test.release.MyClass
beroende på vilken fil man vill använda.
I "DiveLog" exemplet ligger ju alla filer i samma paket "divelog" och om de ligger i samma paket behöver man inte ange import-satser för andra klasser i samma paket vilket jag antar att de inte har gjort.
Nu hoppas jag att det ska funka... Det borde det iaf göra!
En sak till, när du startar så är det:
C:Java>java -classpath C:/Java divelog.DiveLog
Orkar inte kolla hur det blev med stavningen , hoppas att eventuella läsare har överseende med detta...
Desktop: Gigabyte GA-MA770-DS3 | AMD Phenom II 955 BE | 8GB PC6400 | Samsung 1TB + 500GB | Powercolor HD3870
3DMark 2006: 11932 3DMark Vantage: P5137
Laptop: Macbook Pro 2012 | 8GB | Samsung 830 128GB SSD
HTPC: Mac Mini | 3GB | 500GB
1 Guest(s)