Java kompilering.|Programmering / Grafisk formgivning|Forum|Nordichardware

Search
Forum Scope


Match



Forum Options



Minimum search word length is 3 characters - maximum search word length is 84 characters
Lost password?
The forums are currently locked and only available for read only access
sp_Feed sp_TopicIcon
Java kompilering.
kungen86a
Nu vet jag hur man gör inlägg!
Medlem
Forum Posts: 34
Member Since:
December 7, 2002
sp_UserOfflineSmall Offline
1
January 27, 2003 - 1:42 pm
sp_Permalink sp_Print

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?

jonaz
Kommer du hit ofta?
Medlem
Forum Posts: 940
Member Since:
May 8, 2001
sp_UserOfflineSmall Offline
265504
February 4, 2003 - 8:51 am
sp_Permalink sp_Print

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

kungen86a
Nu vet jag hur man gör inlägg!
Medlem
Forum Posts: 34
Member Since:
December 7, 2002
sp_UserOfflineSmall Offline
267883
February 8, 2003 - 2:20 pm
sp_Permalink sp_Print

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. 😕

kungen86a
Nu vet jag hur man gör inlägg!
Medlem
Forum Posts: 34
Member Since:
December 7, 2002
sp_UserOfflineSmall Offline
267947
February 8, 2003 - 3:43 pm
sp_Permalink sp_Print

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!?!)

jonaz
Kommer du hit ofta?
Medlem
Forum Posts: 940
Member Since:
May 8, 2001
sp_UserOfflineSmall Offline
268898
February 10, 2003 - 8:54 am
sp_Permalink sp_Print

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

kungen86a
Nu vet jag hur man gör inlägg!
Medlem
Forum Posts: 34
Member Since:
December 7, 2002
sp_UserOfflineSmall Offline
272451
February 15, 2003 - 11:09 pm
sp_Permalink sp_Print

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 kopilera

Om 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

kungen86a
Nu vet jag hur man gör inlägg!
Medlem
Forum Posts: 34
Member Since:
December 7, 2002
sp_UserOfflineSmall Offline
272462
February 15, 2003 - 11:19 pm
sp_Permalink sp_Print

så mörknar det igen, om ajg tar bort Welcome helt från källkoden så dyker nästa sak på listan upp, dvs Diver klassen. och jag som nästan började hoppas =/

jonaz
Kommer du hit ofta?
Medlem
Forum Posts: 940
Member Since:
May 8, 2001
sp_UserOfflineSmall Offline
273967
February 18, 2003 - 2:14 pm
sp_Permalink sp_Print

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

Forum Timezone: Europe/Stockholm
Most Users Ever Online: 694
Currently Online:
Guest(s) 67
Currently Browsing this Page:
1 Guest(s)
Top Posters:
Andreas Galistel: 16287
Jonas Klar: 15897
ilg@dd: 10810
Nyhet: 10607
Mind: 10550
Ctrl: 10355
Gueno: 9881
Guest: 9344
Snorch: 8881
Callister: 8468
Newest Members:
PetrbonFU PetrbonFU
Karine Bembry
Dolores Mcdaniels
Anibal McLeish
Francisca Alt
Alfie Everhart
Lester Huitt
Orlando Jorgensen
Mikki Lundgren
Dakota Kozlowski
Forum Stats:
Groups: 11
Forums: 59
Topics: 146630
Posts: 1300967

 

Member Stats:
Guest Posters: 2
Members: 79425
Moderators: 0
Admins: 11
Administrators: nordicadmin, Henrik Berntsson, Anton Karmehed, Carl Holmberg, Joel Oscarsson, Mikael Linnér, Mikael Schwartz, Andreas Paulsson, Nickebjrk, Mattias Pettersson, EmxL