Компиляция и выполнение через commandLine показывает NoClassDefFoundError при попытке найти пакет Java - PullRequest
2 голосов
/ 02 июня 2010

У меня есть клиент-серверная программа, которая пытается отправить и получить объект.

Существует три пакета: серверный, клиентский и общий расшаренный содержит только класс сообщений

Я поместил Message.java из общего пакета в ту же папку, что и исходные файлы пакета calcclient и исходные файлы пакета calcserver.

Я компилирую, используя строку: javac -classpath.; (длинный список файлов client или server.java) Message.java Они могут скомпилировать. Затем я изменил каталог на один уровень и запустил: java -classpath.; .Главная

Когда я использую Netbeans для запуска, вся программа работает как обычно. Но нет, если я бегу из командной строки. Если он выполняется через командную строку, программа будет работать до тех пор, пока ей не потребуется использовать объект Message. Тогда он покажет NoClassDefFoundError

Размещаю ли я нужные файлы в нужных местах? Как заставить программу найти общий пакет через командную строку?

Ответы [ 3 ]

2 голосов
/ 02 июня 2010

Файлы не в нужном месте. Класс Message принадлежит другому пакету, поэтому он не должен жить с другими классами. От http://java.sun.com/j2se/1.5.0/docs/tooldocs/findingclasses.html:

Пользовательские классы - это классы, которые создают на платформе Java. Найти пользователя классы, пусковая установка относится к путь к классу пользователя - список каталоги, архивы JAR и ZIP архивы, которые содержат файлы классов.

Файл класса имеет имя подпути, которое отражает класс полностью название. Например, если класс com.mypackage.MyClass хранится в / myclasses, то / myclasses должны быть в путь к классу пользователя и полный путь в файл класса должен быть /myclasses/com/mypackage/MyClass.class. Если класс хранится в архиве с именем myclasses.jar, затем myclasses.jar должен быть в пользователе путь к классу, и файл класса должен быть хранится в архиве как ком / MyPackage / MyClass.class.

У вас есть несколько вариантов:

Лучшее решение - потратить время на изучение муравья. Проекты Netbeans создаются с помощью Ant, который является действительно замечательной особенностью Netbeans в моей книге, и вы можете открыть build.xml в своем проекте и найти достаточно хорошо прокомментированное описание того, что Netbeans делает для создания вашего проекта. И действительно, я не думаю, что было бы много мест, где запускались сборки из командной строки, поэтому изучение чего-то вроде Ant было бы очень полезно.

Следующий уровень сложности будет состоять в том, чтобы вручную создать Jar для вашего общего пакета и поместить его где-нибудь в путь к классам.

Самый простой подход - просто скомпилировать java-файлы в файлы классов и поместить их в соответствующий каталог, отражающий имя пакета, как объяснено в приведенной выше цитате.

1 голос
/ 02 июня 2010

Если вы построите свой проект в NetBeans, вы увидите, что есть папка dist, где вы можете найти свой проект в двоичном коде. После создания исходного кода NetBeans указывает, как следует запускать проект из командной строки.

Если вы используете это и проблема не устраняется, вам следует перестроить свой класс Message как библиотеку, связать его с проектом с помощью NetBeans, и проект должен работать из командной строки с помощью команды, указанной в NetBeans.

Если вы хотите вручную скомпилировать исходные файлы, я думаю, что лучшее решение - это что-то вроде Google: вручную скомпилировать исходный код Java

0 голосов
/ 02 июня 2010

Цитировать значение classpath, если оно содержит пробелы.

java -classpath C:\Program Files\java\...;C:\...
                          ^
                          This is what's killing you slowly.

Попробуйте это так:

java -classpath "C:\Program Files\java\...;C:\..."
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...