Можно ли запустить программу из командной строки, созданную Eclipse? - PullRequest
28 голосов
/ 16 февраля 2010

Используя Eclipse, я создал программу SWT Hello World. Мне удалось запустить эту программу из Eclipse, и она работала нормально.

В "/ home / myname / workspace / HelloWorldSWT" я нашел два файла: HelloWorldSWT.java и HelloWorldSWT.class. Я хотел выполнить соответствующую программу из командной строки. Сначала я попытался набрать «java HelloWorld» и получил следующее сообщение об ошибке:

Exception in thread "main" java.lang.NoClassDefFoundError: HelloWorld
   at gnu.java.lang.MainThread.run(libgcj.so.90)
Caused by: java.lang.ClassNotFoundException: HelloWorld not found in gnu.gcj.runtime.SystemClassLoader{urls=[file:./], parent=gnu.gcj.runtime.ExtensionClassLoader{urls=[], parent=null}}
   at java.net.URLClassLoader.findClass(libgcj.so.90)
   at gnu.gcj.runtime.SystemClassLoader.findClass(libgcj.so.90)
   at java.lang.ClassLoader.loadClass(libgcj.so.90)
   at java.lang.ClassLoader.loadClass(libgcj.so.90)
   at gnu.java.lang.MainThread.run(libgcj.so.90)

Я также попробовал эту "java -cp / home / roman / workspace / HelloWorld.HelloWorld". В результате я получил следующее сообщение об ошибке:

Exception in thread "main" java.lang.NoClassDefFoundError: loaded class HelloWorld.HelloWorld was in fact named HelloWorld
   at java.lang.VMClassLoader.defineClass(libgcj.so.90)
   at java.lang.ClassLoader.defineClass(libgcj.so.90)
   at java.security.SecureClassLoader.defineClass(libgcj.so.90)
   at java.net.URLClassLoader.findClass(libgcj.so.90)
   at gnu.gcj.runtime.SystemClassLoader.findClass(libgcj.so.90)
   at java.lang.ClassLoader.loadClass(libgcj.so.90)
   at java.lang.ClassLoader.loadClass(libgcj.so.90)
   at gnu.java.lang.MainThread.run(libgcj.so.90)

Кто-нибудь знает, что я делаю не так? Заранее благодарю за любую помощь.

Ответы [ 9 ]

69 голосов
/ 16 февраля 2010

Перейдите в перспективу Debug и выберите программу, которую вы только что запустили (где она говорит Прервано, значение выхода ... на вкладке Debug ) Щелкните правой кнопкой мыши и выберите Properties, там вы можете увидетьвся команда командной строки, которая была запущена Eclipse.

Вы можете запустить эту же команду в том же каталоге, что и Eclipse (см. В разделе Конфигурации запуска, Аргументы, Рабочий каталог), и она будет работать.

7 голосов
/ 17 февраля 2010

Вы должны добавить каталог, в котором eclipse хранит файл HelloWorldSWT.class в пути к классам.Он определяется при создании проекта, например, «bin», «build» или «classes».Проверьте свойства проекта или найдите файл HelloWorldSWT.class.

Предполагая, что это каталог build в рабочем пространстве HelloWorldSWT, и что ваш класс отсутствует в пакете (пакет по умолчанию), команда должна быть:

java -cp /home/roman/workspace/HelloWorldSWT/build HelloWorldSWT

или просто изменить накаталог и использование:

java -cp . HelloWorldSWT

РЕДАКТИРОВАТЬ:
-cp . означает, что только фактический каталог используется для поиска файлов классов.Вы также должны добавить все библиотеки (JAR или другие каталоги), используемые вашей программой (databse, SWT, ...).
Для получения более подробной информации вы можете посмотреть документацию: Как найти классы , Установка Classpath и Java-команда

4 голосов
/ 25 июня 2014

Я делаю обходной путь, чтобы в полной мере воспользоваться удобством Eclipse.Ниже я нашел то, что у меня получилось.Надеюсь, это поможет: enter image description here

3 голосов
/ 17 февраля 2010

Мне кажется, у вас нет класса с именем HelloWorldSWT``, а есть класс с именем HelloWorldSWT в пакете с именем HelloWorldSWT (вы можете подтвердить это, перейдя в первую строку HellowWorldSWT.java, где вы найдете package HelloWorldSWT;

Если это так, перейдите в родительский каталог и введите

java HelloWorldSWT.HelloWorldSWT Это будет работать.

2 голосов
/ 16 февраля 2010

Возможно, вы неправильно загружаете SWT-библиотеку, и в результате ваш класс не загружается.

Библиотека SWT является частью jar-файлов, которые уже загружены при запуске Eclipse, но не загружены в параметре командной строки. Вы соответственно изменили свой путь к классу?

Вот старая статья о том, как делать подобные вещи в старых версиях Eclipse. http://www.ibm.com/developerworks/opensource/library/os-ecgui1/ Сегодня вам понадобятся разные банки с последней версией Eclipse. Это может даже сводиться к одной банке.

Ознакомьтесь с SWT FAQ ; по крайней мере для Mac Carbon, вы можете использовать одну банку, я бы поспорил, что вы можете сделать это для других платформ.

Кроме того, я не уверен на 100%, что вы можете запускать Eclipse под openJDK, что, похоже, имеет место на вашей платформе.

1 голос
/ 18 февраля 2014

Я нашел другое быстрое и грязное решение, если вы просто хотите увидеть какой-нибудь вывод в командной строке. Но это не очень хорошая практика в долгосрочной перспективе!

  1. Удалите декларацию пакета в вашем коде (Eclipse будет жаловаться и выделит вам красный крестик, сначала проигнорируйте это), например, package hello;

  2. Сохранить.

  3. Откройте командную строку и перемещайтесь, пока не окажетесь в папке src (используйте cd).

  4. Скомпилируйте файл Java, например, javac HelloWorld.java

  5. Выполнить файл класса Java, например, java HelloWorld

Это должно работать, если вы находитесь в правильном каталоге без каких-либо объявлений пакета в коде! Объявления пакетов вызывают проблемы ... и Eclipse настроен на то, чтобы убедиться, что все работает, поэтому хорошо иметь там декларации пакетов. Альтернативный обходной путь заключается в том, чтобы действительно пойти и установить classpath самостоятельно (что всегда смущает меня каждый раз, когда мне приходится это делать, что я делаю редко).

1 голос
/ 15 ноября 2012

Если вы хотите запустить программу с аргументами командной строки из Eclipse, вы можете перейти к Run-> Run Configurations, которая откроет окно с программой, которую вы запускаете, а также окно, где вы можете ввести аргументы .

1 голос
/ 17 февраля 2010

Тогда вы неправильно установили classpath.

Мне кажется, что обычно в IDE удобнее создавать jar-файл со всеми включенными не jre-библиотеками и выполнять его из командной строки.

java -jar myprogram.jar

Какая польза от программы, написанной на Eclipse, если она может быть легко выполнена только внутри Eclipse?

Это действительно хороший вопрос, и развертывание Java-приложений само по себе является искусством. И компиляция, и выполнение - если не сложно - по крайней мере громоздки, когда выполняются вручную. Но Eclipse и другие инструменты, такие как Netbeans, могут помочь вам легко выполнить эти задачи и даже упаковать вашу программу для вас, чтобы другие, кто не использует эти инструменты, также могли легко выполнять программы.

1 голос
/ 16 февраля 2010

Эта проблема вызвана тем, что JVM не может найти класс HelloWorld, поскольку у вас есть имя класса HelloWorldSWT с основным методом в нем. попробуйте с

Java HelloWorldSWT

...