я могу загрузить пользовательские пакеты в eclipse для запуска при запуске и как? - PullRequest
0 голосов
/ 07 февраля 2012

Я новичок в Java и в IDE затмения.

Я использую Eclipse

Eclipse SDK Версия: 3.7.1 Идентификатор сборки: M20110909-1335

На машине с Windows Vista.

Я пытаюсь извлечь уроки из книги «Мышление в Java vol4». Автор использует свои собственные пакеты для уменьшения набора текста. Однако автор не использовал Eclipse, и именно здесь проблема возникает в ..

Это пример кода в книге.

import java.util.*;
import static net.mindview.util.print.*;
public class HelloWorld {


public static void main(String[] args) {
    System.out.println("hello world");
    print("this does not work");
}

это содержимое print.Java

   //: net/mindview/util/Print.java 
   // Print methods that can be used without 
   // qualifiers, using Java SE5 static imports: 
   package net.mindview.util; 
   import java.io.*; 

     public class Print { 
   // Print with a newline: 
      public static void print(Object obj) { 
      System.out.println(obj); 
   } 
   // Print a newline by itself: 
   public static void print() { 
   System.out.println(); 
  } 
   // Print with no line break: 
    public static void printnb(Object obj) { 
    System.out.print(obj); 
  } 
   // The new Java SE5 printf() (from C): 
    public static PrintStream 
    printf(String format, Object... args) { 
    return System.out.printf(format, args); 
   } 
    } ///:~ 

Ошибка, которую я получаю больше всего, заключается в утверждении.

    Import static net.mindview.util.print.*;

На этом этапе Eclipse IDE говорит, что не может разрешить net

также на

     print("this does not work");

Eclipse IDE сообщает, что класс print () не существует для класса HelloWorld.

Я пытался заставить их работать, но с ограниченным успехом. Автор использует еще 32 из этих пакетов в остальной части книги.

Я пытался добавить каталог в classpath, но, похоже, это работает, только если вы используете компилятор JDK. Я попытался добавить их как библиотеки, и я попытался импортировать их в пакет в исходном файле в проекте. Я попробовал несколько других вещей, но не могу вспомнить их все сейчас.

Мне удалось заставить один из файлов работать, файл print.java, для которого я дал листинг в этом сообщении. Я сделал это, создав новую исходную папку, затем создав новый пакет в этой папке и импортировав файл print.java в пакет. Но в следующий раз, когда я попробую то же самое, у меня ничего не получится.

Мне нужен способ, чтобы затмение загружало все эти файлы .java при запуске, поэтому, когда они понадобятся мне для упражнений в книге, они будут там и будут работать на меня, или просто простой способ заставить их работать каждый раз.

Я знаю, что я не единственный, у кого возникла эта проблема. Я видел другие вопросы об этом в поиске в Google, и они также спрашивали о книге «Мышление в Java». Я искал этот сайт и другие, и мне просто не повезло.

Любая помощь с этим или sugestions приветствуются и очень ценятся.

спасибо

Хорошо, я попытался заставить это работать, как вы сказали, я запустил новый проект и удалил статический элемент из оператора импорта, затем я создал новую исходную папку, затем я создал новый пакет в исходной папке. Затем я импортировал файловую систему и выбрал папку net.mindview.util.

Теперь оператор immport больше не выдаёт мне ошибку. Но оператор print делает единственный способ заставить оператор print работать, используя его полностью определенное имя. Вот код.

          import  net.mindview.util.*;
       public class Hello2 {

public static void main(String[] args) {
    Hello2 test = new Hello2();
    System.out.println();
    print("this dooes not work");
    net.mindview.util.Print.print("this stinks");

}

     }

Ошибка в операторе печати: Метод print (String) не определен для типа Hello2

и если я попытаюсь запустить его, я получу следующую ошибку: Исключение в потоке "main" java.lang.Error: Нерешенная проблема компиляции: Метод print (String) не определен для типа Hello2

at Hello2.main(Hello2.java:6)

Statement ::::: net.mindview.util.Print.print ("this stinks") является полностью квалифицированным оператором print, и он не выдает ошибку, но полностью уничтожает цель print.java. файл.. Если у вас есть какие-либо вопросы, пожалуйста, спросите, я перезвоню вам, как только смогу.

Ответы [ 3 ]

3 голосов
/ 29 сентября 2013

У меня были похожие проблемы.Я решил это, выполнив следующие шаги:

  1. Нажмите Файл-> Создать-> Проект Java.Заполните UtilBuild для ProjectName.Выберите опцию «Использовать папку проекта в качестве root и нажмите« Готово ».
  2. Щелкните правой кнопкой мыши UtilBuild в окне PackageExplorer и выберите New-> package. Для имени пакета заполните net.mindview.util
  3. Перейдите в разархивированной папке Thinking In Java (TIJ) в TIJ-> net \ mindview \ util. Здесь вы найдете все файлы исходного кода (.java) для util.
  4. Выбрать всефайлы в папке net \ mindview \ util и перетащите их в пакет net.mindview.util в UtilBuild в Eclipse. Выберите опцию «Копировать файлы» и нажмите «ОК».
  5. Возможно, у вас уже естьфлажок «Автоматически создавать». Если нет, перейдите в Project и нажмите «Автоматически строить». Это создаст файлы .class из исходных файлов .java.
  6. В Eclipse щелкните проект правой кнопкой мышивы работали (тот, где вы не смогли заставить работать этот взорванный метод print ()!) Щелкните «Свойства» и «Путь сборки Java» -> «Библиотеки». Нажмите «Добавить папку классов ...», установите флажок для UtilBuild (расположение по умолчанию для файлов .class).

Я думаю, что путаница здесь возникает из-за CLASSPATH.Если вы используете Eclipse для сборки и запуска своего кода, тогда Eclipse управляет вашим CLASSPATH.(Вам не нужно вручную редактировать CLASSPATH в части «Переменные среды» в свойствах вашего компьютера, и это ничего не меняет в отношении Eclipse Build and Run.)

Для вызова кода, которыйсуществует за пределами вашего текущего проекта (для удобства я назову этот «внешний код»), вам нужно удовлетворить три вещи: A. Для этого кода вам необходимо иметь файлы .class (в виде файлов .class или внутриa JAR) B. Вам необходимо указать в своем исходном коде , где искать для «внешнего кода» C. Вам необходимо указать, где начать в поисках «внешнего кода»

Чтобы удовлетворить эти требования, в этом примере мы:

A.Создайте проект UtilBuild, который создает нужные нам файлы .class.

B.Добавьте оператор import static net.mindview.util.Print. *;в нашем коде

C.Добавьте библиотеку папок классов в Eclipse (Java Build Path-> Libraries).

Вы можете исследовать влияние шага C, изучив файл .classpath, который находится непосредственно в папке вашего проекта.Если вы откроете его в блокноте, вы увидите строку, похожую на следующую:

<classpathentry kind="lib" path="/UtilBuild>

Вы должны объединить это с оператором import, чтобы понять, где компилятор будет искать файл .class.Объединение пути = "/ UtilBuild" и импорт статического net.mindview.util.Print. *;говорит нам, что компилятор будет искать файл класса в:

UtilBuild/net/mindview/util

и что он будет принимать каждый класс, который мы создали из файла Print.java (Print. *).

ПРИМЕЧАНИЕ:

Нет проблем с ключевым словом static в выражении

import static net.mindview.util.Print.*;

static здесь просто означает, что у вас нетчтобы указать имя класса из Print.java, просто методы, которые вы хотите вызвать.Если мы опускаем ключевое слово static в операторе импорта, нам нужно квалифицировать этот метод print () классом, к которому он принадлежит:

import net.mindview.util.Print.*;
//...
   Print.print("Hello");

, что немного более многословно, чем то, что достигается статическимимпорт.

МНЕНИЕ:

Я думаю, что большинство новичков в Java будут использовать Eclipse хотя бы на начальном этапе. Книга Thinking in Java, похоже, предполагает, что вы будете делать что-то через командную строку (отсюда и руководство по редактированию переменных среды для обновления CLASSPATH). Это в сочетании с использованием кода папки утилит с самого начала книги, я думаю, является источником путаницы для новых изучающих язык. Мне бы очень хотелось, чтобы весь исходный код был организован в проект Eclipse и доступен для скачивания. Если не считать этого, было бы неплохо включить файлы .class в папку «net / mindview / util», чтобы все было немного проще.

0 голосов
/ 07 февраля 2012

Вы должны удалить ключевое слово static из своего объявления об импорте, это: import static net.mindview.util.print.*; становится таким: import net.mindview.util.print.*;

Если это также не работает, я предполагаю, что вы сделали следующее:

  • Создайте свой собственный проект;
  • Начните копировать код прямо из книги.

Кажется, проблема в следующем: package net.mindview.util; должен соответствовать структуре вашей папки в папке src. Итак, если в вашей папке src вы создадите новый пакет и назовете его net.mindview.util, и в нем вы разместите свой класс Print, вы сможете его заставить работать.

Для дальнейшего использования, вы всегда должны убедиться, что ваше декларация package, которая находится наверху вашего Java-класса, соответствует пакету, в котором он находится.

EDIT: Я видел ваши изменения, и проблема, кажется, имеет простое решение. Вы объявляете статический метод с именем print(). В Java статические методы доступны с помощью ClassName.methodName(). Это: print("this dooes not work"); не будет работать, потому что у вас нет метода с именем print, который принимает строковый аргумент в вашем Hello2 классе. В Java, когда вы пишете что-то вроде methodName(arg1...), JVM будет искать методы с этой сигнатурой (имя метода + параметры) в классе, в котором вы делаете вызов, и любых других классах, которые может расширить ваш вызывающий класс.

Однако, как вы правильно заметили, это будет работать net.mindview.util.Print.print("this stinks");. Это потому, что вы обращаетесь к статическому методу надлежащим образом, что означает ClassName.methodName();.

Короче говоря, чтобы решить вашу проблему, вам нужно:

  • Создайте метод с именем print, который принимает строковый аргумент в вашем Hello2 классе;
  • Назовите свой метод печати следующим образом: Print.print("this stinks");

Любое из этих двух решений должно работать для вас.

0 голосов
/ 07 февраля 2012

U должен импортировать пакет static net.mindview.util, а не static net.mindview.util.Print, и вы должны расширить класс Print, чтобы использовать его метод .......

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...