"Не мог найти основной класс" - PullRequest
5 голосов
/ 12 июля 2011

Я пытаюсь запустить пример приложения Java из команды promopt, но получаю следующую ошибку:

Exception in thread "main" java.lang.NoClassDefFoundError: com/badlogic/gdx/helloworld/HelloWorldDesktop
Caused by: java.lang.ClassNotFoundException: com.badlogic.gdx.helloworld.HelloWorldDesktop
        at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
        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)
Could not find the main class: com.badlogic.gdx.helloworld.HelloWorldDesktop.  Program will exit.

Команда, которую я использую для запуска этого приложения:

java -cp .;gdx.jar;gdx-backend-jogl.jar com.badlogic.gdx.helloworld.HelloWorldDesktop

Где все соответствующие файлы находятся в текущем рабочем каталоге (файлы .java, .class и .jar)

Команда, которую я использовал для создания файлов .class, была следующей (есть 2 файла .java):

javac -cp gdx.jar;gdx-backend-jogl.jar HelloWorld.java HelloWorldDesktop.java

Опять же, это было запущено из того же рабочего каталога - содержимое HelloWorldDesktop.java (более или менее):

package com.badlogic.gdx.helloworld;

public class HelloWorldDesktop {
    public static void main (String[] argv) {
        // Application
    }
}

Я пытаюсь изучать Java как разработчика C #, поэтому, имея глубокие познания в программировании, весь набор инструментов Java в настоящее время полностью смущает меня. Исключение указывает, что класс HelloWorldDesktop не может быть найден, но, насколько я могу судить, у меня есть правильное имя, и я добавил правильные файлы .jar в путь к классу, и поэтому Java должна быть в состоянии загрузить этот класс.

Почему он не может найти HelloWorldDesktop?

Ответы [ 2 ]

7 голосов
/ 12 июля 2011

Правильно - проблема в том, что у вас есть HelloWorldDesktop.class в текущем каталоге, тогда как он должен находиться в com / badlogic / gdx / helloworld

Вы можете это исправить с помощью команды javac - просто используйте-d ., чтобы сказать это лечить "."как корневой каталог пакета для вывода.

Обычно вы хотите также организовать ваш исходный код по пакетам, но для этого теста "привет мир" это может не стоить.

1 голос
/ 12 июля 2011

Хорошо, сначала вам нужно скомпилировать, а затем запустить приложение, используя два разных инструмента

Шаг 1: javac.exe, который компилирует файлы .java в файлы .class. Пример: javac.exe ProgramFolder \ *. Java (где ProgramFolder = Каталог файловой системы)

тогда

Шаг 2: java.exe и укажите в качестве параметра приложение, которое вы хотите запустить, включая путь, но вместо "\" для папок используйте "." и название вашего класса Пример: ProgramFolder.ClassProgram

Это сработает. если вы попытаетесь запустить Java.exe ProgramFolder \ Program.class или просто ProgramFolder \ Program или перейдите в папку, где находятся файлы классов, и только сделайте Java.exe Program.class, это всегда даст вам сообщение об ошибке Main class.

Посмотрите первые 2 строки этой картинки http://3.bp.blogspot.com/-FO4Hmg9LrI0/Td7FoSIi_XI/AAAAAAAAF6g/FVAiP0h8CSc/s1600/fiborial_java.PNG

...