package - totalne podstawy

0

Mam klasę:

package paczka;

public class Na {

	String nazwa = "@";
	int liczba = 1;

	public void drukDanych() {
		System.out.println("nazwa: " + nazwa + "\n" +
		"liczba: " + liczba);
	}
}

Kompiluję Na.java – jest OK.

Dodaje kolejną z main:

package paczka;

public class De {

	public static void main(String[] args) {
		Na naO = new Na();
		naO.drukDanych();
		System.out.println(naO.toString());
	}
}

kompiluję De.java i nie jest OK:

De.java error: cannot find symbol
Na naO = new Na();
^
symbol: class Na
location: class De
De.java error: cannot find symbol
Na naO = new Na();
^
symbol: class Na
location: class De
2 errors

Słowem: czemu nic mi nie daje wspólny nagłówek package paczka?
Plik z obiema klasami kompiluje się, ale uruchumienie wywala:

Exception in thread "main" java.lang.NoClassDefFoundError: De (wrong name: paczka/De)
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:803)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:449)
at java.net.URLClassLoader.access$100(URLClassLoader.java:71)
at java.net.URLClassLoader$1.run(URLClassLoader.java:361)
at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:482)

Wszystko gra, gdy zakomentuję package paczka.

Dyletanckie pytanie poczatkującego: dlaczego te pliki się nie widzą? Jak używać package?

0

A na dysku są w tym samym katalogu (paczka)?

0

Tak, w tym samym. W katalogu domowym (linux).

0

pod windowsem

>mkdir bin && javac -d bin *.java && java -cp bin paczka.De
nazwa: @
liczba: 1
paczka.Na@1db9742

>dir .
08/22/2016  15:57    <DIR>          .
08/22/2016  15:57    <DIR>          ..
08/22/2016  15:57    <DIR>          bin
08/22/2016  15:46               200 De.java
08/22/2016  15:45               221 Na.java
               2 File(s)            421 bytes

>dir bin\paczka
08/22/2016  15:57    <DIR>          .
08/22/2016  15:57    <DIR>          ..
08/22/2016  15:57               508 De.class
08/22/2016  15:57               730 Na.class
               2 File(s)          1,238 bytes
0

Spróbuj może skompilować przez javac Na.java De.java. Rozwiązaniem problemu zapewne będzie jakieś rozsądne IDE, ale takie kompilowanie jak podałem też powinno dać radę.

0

Dzięki, obie komendy działają na etapie kompilacji.
Uruchomienie w obu przypadkach to: Could not find or load main class De.java

0

Wyjdź do poziomu folderu paczka tak by po ls wyświetliło Ci, że jest tam katalog paczka. Następnie odpal przez java paczka.De.

0

Wszedłem do katalogu paczka: mam tam (tylko) dwie klasy: Na.class i De.class.
java paczka.De → Could not find or load main class paczka.De

Chyba jestem skazany na tworzenie wszystkiego w jednym pliku...

1

Nie, jesteś stworzony do pracy przy wożeniu taczką, bo czytać nie potrafisz.
Masz być w katalogu bin czy target czy jak on sie u ciebie nazywa czyli takim z którego poziomu widać katalog paczka (a nie pliki!) i stamtąd zrobić java paczka.De

0

No i po co tyle niemiłych słów?
Wszystko gra, dzięki :)

1

Zalecam jednak zaprzestać programowanie lodówką, czy mikrofalówką i użyć przeznaczonych do tego narzędzi jak jakis InteliiJ. Bo już twoje zdjęcia w internecie pokazują: https://4programmers.net/store/microblog/189430540757b98052322d4.jpg ;)

0

Komercyjnych narzędzi unikam: bieda umysłowa połączona z tą na bankowym koncie.

0

IntelliJ Community jest darmowy. Ale jak wolisz mikrofalówkę... ;]

1 użytkowników online, w tym zalogowanych: 0, gości: 1