Мне удалось скомпилировать Java-программу, но я не могу ее выполнить - PullRequest
2 голосов
/ 25 января 2010

Я только что установил JDK в Windows Vista. После этого я установил правильные значения для 4 переменных среды: classpath, include, lib, path. После этого я смог скомпилировать свою HelloWorld-программу (я получил файл * .class). Но когда я пытаюсь выполнить скомпилированную программу (я набираю java HelloWorldApp), она не работает. Ява пишет много вещей, и в конце написано, что «не удалось найти основной класс: HelloWorldApp». Кто-нибудь, пожалуйста, может помочь мне с этой проблемой?

Ответы [ 6 ]

5 голосов
/ 25 января 2010

просто для наглядности; вы говорите, что у вас есть класс в пакете по умолчанию, то есть вы не включили спецификатор пакета в файл Java, и ваш класс называется HelloWorldApp. Когда вы скомпилировали это, вы получили файл класса HelloWorldApp.class в текущем каталоге.

Предполагая, что вышеизложенное верно, тогда попробуйте:

java -cp . HelloWorldApp

Например, на Unix Box работает следующее:

$ echo 'class HelloWorldApp { public static void main(String []argv) { System.out.println("Hello World!"); } }' > HelloWorldApp.java
$ javac HelloWorldApp.java 
$ java -cp . HelloWorldApp 
Hello World!

Конечно, вы должны сделать отступ в своем коде немного лучше, чем просто поместить все это в одну строку; -)

Редактировать : Чтобы ответить на комментарий:

Обычно путь к классам по умолчанию - это библиотеки времени выполнения, а - текущий каталог . Тем не менее, если у вас установлена ​​переменная CLASSPATH, это переопределит значение по умолчанию, и вам необходимо явно установить classpath обратно в значение «по умолчанию». Чтобы проверить, установлена ​​ли переменная окружения CLASSPATH, вы можете сделать (опять-таки, предполагая, что Unix):

set | grep CLASSPATH

Если он установлен, поэтому вам нужно вручную включить . в ваш путь к классам.

4 голосов
/ 25 января 2010
  1. создать файл с именем HelloWorld.java;
  2. вставьте код, указанный ниже, внутри HelloWorld.java:
  3. скомпилируйте его, выполнив команду: javac HelloWorld.java в той же папке, где находится HelloWorld.java;
  4. выполнить код, выполнив: java -cp . HelloWorld в той же папке, где находится HelloWorld.java.

public class HelloWorld {
    public static void main(String[] args) {
        System.out.println("HelloWorld works!");
    }
}

Как работает classpath, можно прочитать здесь: http://en.wikipedia.org/wiki/Classpath_%28Java%29

0 голосов
/ 25 января 2010

Понятие пути к классу и логическое различие между исходным кодом Java и скомпилированным байтовым кодом общеизвестно сложно получить правильно.

Я настоятельно рекомендую вам ознакомиться с Sun Java Tutorial. Соответствующий раздел

http://java.sun.com/docs/books/tutorial/getStarted/cupojava/win32.html

0 голосов
/ 25 января 2010

Разместите свой код. Я считаю, что проблема в том, что ваш основной класс не определен правильно. Я сделал это на днях.

public static void main(String[] args){
    //code
}
0 голосов
/ 25 января 2010

Что произойдет, если вы используете:

java -cp {path to directory with HelloWorldApp in it} HelloWorldApp

Этот путь должен содержаться в вашей переменной окружения CLASSPATH. Это экспортируется в вашу командную оболочку? Вам нужно запустить новую командную оболочку, чтобы получить самую последнюю версию CLASSPATH?

0 голосов
/ 25 января 2010

Включили ли вы . и .. в свой путь? Просто для уточнения. представляет ваш текущий каталог, а .. представляет ваш родительский каталог. Вы говорите, что Java должен искать текущий каталог и родительский каталог, чтобы найти класс. Добавьте то же самое в свой путь к классам.

...