Настройка Java - базовый (но не такой базовый ...) вопрос - PullRequest
5 голосов
/ 13 июня 2011

Я недавно запрыгнул на Java с Head First Java, и обнаружил, что в книге недостаточно информации о настройке Java. Он довольно много сказал мне скачать JDK и упомянул кое-что о переменной classpath.

Я был очень смущен, и, очевидно, моя Java не была настроена на работу. Итак ... Я исследовал и сумел добавить каталог / bin / в свой CLASS_PATH, а также создал новую системную переменную с именем JAVA_HOME и указал ее на папку bin. Я не совсем уверен, что делать - и эта тема, казалось бы, проста для любого другого программиста, потому что я не могу найти кого-то, у кого есть такие большие трудности с настройкой их среды Java.

Итак, теперь я могу компилировать и запускать программы. Я сделал кое-что из Hello World, Яда Яда. Теперь, на странице 37, мы на самом деле собираемся сделать кое-что ООП. Вот классы:

class Movie {
    String title;
    String genre;
    int rating;

    void PlayIt() {
        System.Out.println("Playing the movie");
    }
}

и второй:

public class MovieTestDrive  {
    public static void main(String[] args) {
        Movie one = new Movie();
        one.title = "Movie 1";
        one.genre = "Movie 1 Genre";
        one.rating = -2
        two.title = "Movie 2";
        two.genre = "Movie 2 Genre";
        two.rating = -1
        three.title = "Movie 3";
        three.genre = "Movie 3 Genre";
        three.rating = 3
    }
}

Итак, я могу скомпилировать первый класс (Movie.java). Однако, когда я пытаюсь скомпилировать второй класс (объект?) - MovieTestDrive.java, я возвращаю эту ошибку:

MovieTestDrive.java:12: cannot find symbol
symbol : method PlayIt()
location: class Movie
two.playIt();

1 error

Я провел некоторое исследование, и из того, что я собрал, я думаю, что Java не знает, как искать первый класс. Однако мое исследование не нашло почти никакой полезной информации о том, как вести глупую вещь туда, где она находится.

Ответы [ 8 ]

4 голосов
/ 13 июня 2011

Существует ли какая-либо конкретная причина, по которой вы не используете IDE, например Eclipse , IntelliJ IDEA или Netbeans ?

3 голосов
/ 13 июня 2011

Попробуйте изменить определение метода PlayIt () для публики следующим образом:

  public void PlayIt() {
    System.out.println("Playing the movie");
  }

затем перекомпилируйте и попробуйте снова.

Возможно, ваши классы не в одной упаковке.

Кроме того, предоставленный вами основной метод выглядит неправильно. Вы не объявили два и три! Вам необходимо объявить их и создать экземпляры объектов Movie перед их использованием.

2 голосов
/ 13 июня 2011

Вам не хватает точек с запятой и некоторых объявлений.

public class MovieTestDrive  {
    public static void main(String[] args) {
        Movie one = new Movie();
        Movie two = new Movie(); // <-- missing declaration
        Movie three = new Movie(); // <-- missing declaration
        one.title = "Movie 1";
        one.genre = "Movie 1 Genre";
        one.rating = -2; // <-- Missing ;
        two.title = "Movie 2";
        two.genre = "Movie 2 Genre";
        two.rating = -1; // <-- Missing ;
        three.title = "Movie 3";
        three.genre = "Movie 3 Genre";
        three.rating = 3; // <-- Missing ;
    }
}
0 голосов
/ 13 июня 2011

Вы пропустили объявления фильма два и три и точки с запятой.

public class MovieTestDrive  {
    public static void main(String[] args) {
        Movie one = new Movie();
        one.title = "Movie 1";
        one.genre = "Movie 1 Genre";
        one.rating = -2;
        Movie two = new Movie();
        two.title = "Movie 2";
        two.genre = "Movie 2 Genre";
        two.rating = -1;
        Movie three = new Movie();
        three.title = "Movie 3";
        three.genre = "Movie 3 Genre";
        three.rating = 3;
        two.PlayIt(); // Try adding this once fixing the code.
    }
}

Также в

 System.Out.println("Playing the movie");
вы должны иметь нижний регистр 'o'. например,
 System.out.println("Playing the movie");

Первый запускаемый файл - это MovieTestDrive.java, потому что это открытый класс с методом main, а файл movie.java - нет. Поэтому вам нужно запустить метод PlayIt () в файле MovieTestDrive.

ПРИМЕЧАНИЕ: это работает в Eclipse ( Eclipse Download )

0 голосов
/ 13 июня 2011

Я думаю, проблема в том, что в вашем классе есть ошибки компиляции.

System.Out в Movie должен быть System.out, например

Сначала скомпилируйте оба Java-класса, а затем попробуйте запустить.

javac Movie.java

javac MovieTestDrive.java

Затем, когда они оба скомпилируются, запустите затем, используя: java -cp. MovieTestDrive

0 голосов
/ 13 июня 2011

Вероятно, вам нужно добавить ваш текущий каталог в ваш путь к классам, если вы используете пакет -empty- по умолчанию и компилируете в тот же каталог, у вас есть исходники java и скомпилированные классы.Попробуйте добавить -classpath . в командную строку javac.

0 голосов
/ 13 июня 2011

JAVA_HOME не должен указывать на папку bin в большинстве случаев, он должен указывать на корневой каталог вашего дистрибутива Java. В среде разработки это корень JDK. Обычно в этом каталоге находится каталог bin, содержащий javac и каталог jre.

При компиляции вашего второго класса он не может найти ваш первый класс, потому что вы забыли сообщить компилятору, где находятся классы для этого проекта. Javac добавит классы в путь к классам, но не обнаружит классы самостоятельно. Вам нужно сделать что-то вроде:

javac -classpath . MovieTestDrive.java

«Точка» указывает, что текущий рабочий каталог является корнем дерева пути к классам.

Обратите внимание, что вам действительно нужно сделать намного больше, чтобы ваши программы (даже если они были просто игрушечными проектами) работали намного лучше в среде Java. Разработка в пакете "default" не рекомендуется. Чтобы исправить разработку пакета по умолчанию, добавьте строку в начало каждого файла .java

package org.myname.movie;

и создайте каталоги, соответствующие

./org
./org/myname
./org/myname/movie

и затем переместите файлы в соответствующие каталоги.

В качестве бонуса вы быстро захотите составить скрипт вашей системы сборки, чтобы избежать необходимости вручную вводить команды компиляции Java. Я рекомендую ant как систему сборки для Java, но если у вас есть предыдущая история с make, вы можете использовать ее до тех пор, пока не станете опытными с ant.

Другими хорошими идеями является разделение вашего каталога исходного кода с вашим каталогом, содержащим ваши скомпилированные классы. Javac имеет параметр командной строки "destdir", который помещает файлы ".class" в другое дерево каталогов, чем ваши исходные коды. Это позволяет легко полностью перестраивать (удаляя классы, не повреждая исходники), и настраивает вас на простую упаковку jar (что вы в конечном итоге захотите сделать).

Удачи, и если вам нужна помощь, не стесняйтесь комментировать.

0 голосов
/ 13 июня 2011
  1. JAVA_HOME должен указывать на корневой каталог JDK, а не на папку bin.
  2. PATH должен указывать на папку bin JDK, т.е. JAVA_HOME\bin.
  3. Чтобы указать на папку jars и classes, добавьте ее в переменную CLASSPATH, а не CLASS_PATH.
  4. Каждое объявление переменной и вызов метода заканчиваются точкой с запятой (;);

Кроме того, вы вызываете two.playIt(); (маленький p в playIt()), а метод PlayIt() имеет заглавную P. Java чувствительна к регистру, поэтому каждый метод, переменная, класс и т. Д. Должны вызываться / использоваться с правильным регистром.

...