Mam dziwny błąd. Mam 2 klasy w tym samym pakiecie, ale nie mogą się znaleźć. Z tego, co pamiętam, tak długo, jak klasy są w tym samym pakiecie, powinny być w stanie wywoływać metody wzajemnie.
Mój kod wygląda podobnie do tego:
w A.java:
package com.mypackage;
public class A{
public static int read(){
//some code
}
}
w B.java:
package com.mypackage;
public class B{
public static void main(String args[]){
int x = A.read();
}
}
i to daje mi cannot find symbol variable A
błąd.
Obie te klasy zależą od niektórych .jar
pliki, ale już uwzględniłem ścieżkę tych słoików CLASSPATH
i A.java
dobrze skompilowany, ale B nie może znaleźć A z pewnych powodów ...
Kiedy usuwam package com.mypackage;
w obu klasach kompilują się dobrze.
Odpowiedzi:
4 dla odpowiedzi № 1Odkąd kompilujesz pliki Java, które są w odrębnych pakietach, będziesz musiał upewnić się, że kompilują się do odpowiednich katalogów.
Możesz użyć tego wywołania, aby to zrobić. Zastąpić $SRC
z lokalizacją plików źródłowych i możesz pozwolić $BIN
być bieżącym katalogiem lub inną lokalizacją na komputerze.
javac -sourcepath $SRC -d $BIN A.java B.java
Gdy chcesz je uruchomić, musisz ponownie dodać je ręcznie do ścieżki klasy (ale to nie jest takie złe).
java -cp $BIN com.mypackage.B
To wywołanie powinno działać; po prostu upewniłem się, że na moim pulpicie znajdują się A.java i B.java. Z -d
flag, które zapewniły, że podczas kompilacji przeszli do odpowiedniego schematu folderów pakietów.
3 dla odpowiedzi № 2
Powinno być:
A.java
package com.mypackage;
class A {
public static int read(){
//some code
}
}
B.java
package com.mypackage;
class B {
public static void main(String args[]){
int x = A.read();
}
}