To mój pierwszy raz, gdy korzystam z pakietów w Javie i nie wiem, gdzie się pomyliłem. Próbuję stworzyć grę Tetris. Oto część mojego kodu:
package mytetris;
import javax.swing.*;
import java.awt.*;
public class Tetris extends JFrame {
// class constructor
public Tetris() {
super("Tetris");
this.setSize(400, 600);
this.setDefaultCloseOperation(EXIT_ON_CLOSE);
// just started, haven"t really done anything
this.setVisible(true);
}
public static void main(String[] args) {
Tetris myTetris = new Tetris();
}
}
Następnie skompilowałem go za pomocą javac Tetris.java
a następnie próbowałem go uruchomić java Tetris
, to właśnie dał mi terminal:
Exception in thread "main" java.lang.NoClassDefFoundError: Tetris (wrong name: mytetris/Tetris)
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClassCond(ClassLoader.java:637)
at java.lang.ClassLoader.defineClass(ClassLoader.java:621)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:141)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:283)
at java.net.URLClassLoader.access$000(URLClassLoader.java:58)
at java.net.URLClassLoader$1.run(URLClassLoader.java:197)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
Odpowiedzi:
3 dla odpowiedzi № 1Załóżmy, że masz plik w /home/mytetris/Tetris.java
Następnie musisz uruchomić „java mytetris.Tetris” w katalogu głównym.
Ponieważ określiłeś pakiet mytetris, znajdzie on pliki w katalogu mytetris, gdzie znajdzie klasę Tetris.
1 dla odpowiedzi nr 2
Myślę, że powinieneś to nazwać
java mytetris.Tetris
0 dla odpowiedzi № 3
próbować
java mytetris.Tetris
użyj pełnej nazwy klasy
0 dla odpowiedzi nr 4
Zakładając, że masz następującą strukturę projektu:
project/src/mytetris/Tetris.java
project/classes
Uruchom z projektu reż:
javac src/mytetris/Tetris.java -d classes
Skompiluje Tetris.java i umieści go w klasach reż.
0 dla odpowiedzi № 5
Jeśli obserwujesz kod kompilacji za pomocą polecenia javap, twoja nazwa klasy, tj
javap Tetris
następnie wyświetla go jako
class mytetris.Tetris{
}
Więc kiedy wykonasz ten program, musisz wydać takie polecenie.
java mytetris.Tetris
wtedy twój program działa płynnie.