Подтвердить что ты не робот

Могу ли я запускать из командной строки, созданной Eclipse?

Используя 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)

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

4b9b3361

Ответ 1

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

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

Ответ 2

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

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

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

или просто перейдите в этот каталог и используйте:

java -cp . HelloWorldSWT

EDIT:
-cp . означает, что для поиска файлов классов используется только фактический каталог. Вы также должны добавить все библиотеки (JAR или другие каталоги), используемые вашей программой (databse, SWT,...).
Для получения дополнительной информации вы можете ознакомиться с документацией: Как найдены классы, Настройка класса path и java comand

Ответ 3

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

Ответ 4

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

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

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

Ответ 5

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

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

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

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

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

Ответ 6

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

java HelloWorldSWT

Ответ 7

Вы не задали путь к классу правильно.

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

java -jar myprogram.jar

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

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

Ответ 8

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

Ответ 9

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

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

  • Сохранить.

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

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

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

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