ich habe da ein für mich großes Problem. Ich schreibe ein Programm (Adressbuch) unter Ubuntu auf der Konsole. Es besteht aus mehreren Klassen. Unter anderem Address.java und Addressbook.java. Wenn ich meinen gesamten Quelltext compiliere kommt eine Fehlermeldung, die ich nicht verstehe. Auf einem anderen Ubunturechner funktioniert der selbe Quelltext jedoch einwandfrei.
Code:
1. Error at in Addressbook.java (at line 1)
import Address;
The import Address cannot be resolved
Mir ist völlig unklar warum dieser Übersetzungsfehler eintritt. Ich hoffe ihr könnt mir helfen.
Wenn Address eine Klasse ist, mußt du einen static-Import machen.
Wenn es ein package sein soll (Package-Namen werden eigentlich
klein geschrieben) dann fehlt noch was du aus diesem
Package importieren willst. Alles? dann
Normalerweise muss man eine Klasse nicht importieren, wenn sie im gleichen Verzeichnis (d.h. im gleichen package) liegt. Was passiert denn, wenn du die Zeile einfach wegläßt?
Eigentlich nicht, wenn alles im gleichen Verzeichnis liegt. Kannst mal versuchen, ERST die Adress.java zu compilieren, und danach die Adressbuch.java, aber das könnte(!) auch schiefgehen. Sonst - naja. Vielleicht hat ja jemand noch eine Idee....
Stimmt schon, eine Klasse, die eine andere Klasse im selben Verzeichnis verwendet muss nicht importiert werden.
Es scheint so, als ob der Java-Launcher java nicht im aktuellen Verzeichnis nach der Klasse Address such, da vielleicht die classpath-Einstellung nicht passt. In der JDK 6 Documentation steht dazu:
How the Java Launcher Finds User Classes
* The default value, ".", meaning that user class files are all the class files in the current directory (or under it, if in a package).
* The value of the CLASSPATH environment variable, which overrides the default value.
* The value of the -cp or -classpath command line option, which overrides both the default value and the CLASSPATH value.
* The JAR archive specified by the -jar option, which overrides all other values. If this option is used, all user classes must come from the specified archive.
Falls der classpath gesetzt ist, viellecht mal den Punkt für das aktuelle Verzeichnis mit aufnehmen:
set CLASSPATH=.;c:\classes
Vielleicht auch mal die Klassendatei Address.class in die Verzeichnisse kopieren:
lib/ext [in the JRE]
jre/lib/ext [in the JDK]
dann wird der "extensions mechanism" genutzt. Vielleicht muss die Address.class vorher in ein jar-Archiv gepackt werden (Name des Archivs ist normalerweise egal)!? Dann nochmal mit import probieren.
also ich hab jetzt mal en kleines testprogramm geschrieben.
Testprogramm (Test.java):
Code:
import Address;
public class Test
{
public static void main(String args[])
{
Test t = new Test();
t.print();
Address ad = new Address();
}
public void print()
{
System.out.println("Test");
}
}
Adressklasse (Address.java - Test.java und Address.java liegen im selben verzeichnis):
public class Address
{
private String surname=null;
private String firstname=null;
private String zip=null;
private String city=null;
public void setSurname(String tSurname)
{
surname=tSurname;
}
public void setFirstname(String tFirstname)
{
firstname=tFirstname;
}
public void setZip(String tZip)
{
zip=tZip;
}
public void setCity(String tCity)
{
city=tCity;
}
public String getSurname()
{
return surname;
}
public String getFirstname()
{
return firstname;
}
public String getZip()
{
return zip;
}
public String getCity()
{
return city;
}
}
Nein! Die Fehlermeldung "the local variable ad is never read" ist nur eine Warnung und besagt einfach, daß du ad zwar etwas zuweist, die main()-Methode danach aber
sofort endet
==>
Wozu weist du den new Address() - Aufruf überhaupt einer
(lokalen) Variable zu, wenn du sie später gar nicht nutzt?
Alles was nicht in demselben package liegt, wie die zu übersetzende
Java-Datei (wenn sie keine package-Deklaration enthält, ist es
automatisch das default-package) muß importiert werden, alle
Klassen aus dem gleichen packages wie das zu übersetzende
Java-File dürfen nicht importiert werden.
Ausnahme: Das package java.lang braucht nicht extra zu importiert
werden, es wird standardmäßig automatisch importiert.
Alles was nicht in demselben package liegt, wie die zu übersetzende
Java-Datei (wenn sie keine package-Deklaration enthält, ist es
automatisch das default-package) muß importiert werden, ...
nö, muss er nicht. man kann auch nur einzelne klassen importieren.
Leroy42 hat gesagt.:
Wenn es ein package sein soll (Package-Namen werden eigentlich
klein geschrieben) dann fehlt noch was du aus diesem
Package importieren willst. Alles? dann
Alles was nicht in demselben package liegt, wie die zu übersetzende
Java-Datei (wenn sie keine package-Deklaration enthält, ist es
automatisch das default-package) muß importiert werden, ...
Wenn es ein package sein soll (Package-Namen werden eigentlich
klein geschrieben) dann fehlt noch was du aus diesem
Package importieren willst. Alles? dann