Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Общие вопросы > Запустить из cmd Java прогу, созданную в NetBeans


Автор: linuxoid 6.8.2011, 11:11
Здравствуйте, коллеги!

У меня такой вопросик: я всегда делал Java программки в NetBeans. Оттуда же всегда нажимаю Run и все сразу успешно выполняется, т.е. проект компилируется без каких-либо проблем. Но сейчас появилась необходимость запустить некоторые аппликации через windows cmd. Если я создаю простейший HelloWorld.java с main методом в ручную, через notepad, то все отлично:

- Выполняем javac HelloWorld.java
- Далее java HelloWorld

Пример:

Код

public class HelloWorld {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        System.out.println( "Welcome to Java Programming!" );
    }
}


Но проблема в том, что я хочу так же запустить проект, который был создан в NetBeans. Т.е. я захожу, к примеру, в "C:\Users\JUser\Documents\NetBeansProjects\HelloWorld\src\helloworld" через cmd

- Выполняем javac HelloWorld.java
- Далее java HelloWorld

Пример:

Код

package helloworld;

public class HelloWorld {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        System.out.println( "Welcome to Java Programming!" );
    }
}


Результат:
Цитата


Exception in thread "main" java.lang.NoClassDefFoundError: HelloWorld (wrong name: helloworld/HelloWorld)
        at java.lang.ClassLoader.defineClass1(Native Method)
        at java.lang.ClassLoader.defineClassCond(Unknown Source)
        at java.lang.ClassLoader.defineClass(Unknown Source)
        at java.security.SecureClassLoader.defineClass(Unknown Source)
        at java.net.URLClassLoader.defineClass(Unknown Source)
        at java.net.URLClassLoader.access$000(Unknown Source)
        at java.net.URLClassLoader$1.run(Unknown Source)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
Could not find the main class: HelloWorld.  Program will exit.



Вопрос: как запустить через cmd проект, который был создан в NetBeans.

Автор: elvis79 6.8.2011, 12:58
NetBeans по-умолчанию создает пакеты 

Код

package helloworld;
....


А значит, надо запускать из пакета:

[MyProject]
-- [helloworld]
-----helloword.java
-----helloworld.class

Код

C:\MyProject\>java helloworld/helloword


Добавлено через 1 минуту и 44 секунды
Или убрать пакет (не знаю разрешить ли IDE, можно и в блокноте) и скомпилировать без пакета

Автор: linuxoid 6.8.2011, 15:36
Гениально! Спасибо!

P.S. запустилось отсюда:

Цитата


C:\Users\JUser\Documents\NetBeansProjects\HelloWorld\src>dir
 Volume in drive C has no label.
 Volume Serial Number is 78B3-4116

 Directory of C:\Users\JUser\Documents\NetBeansProjects\HelloWorld\src

06.08.2011  11:00    <DIR>          .
06.08.2011  11:00    <DIR>          ..
06.08.2011  11:03    <DIR>          helloworld
               0 File(s)              0 bytes
               3 Dir(s)   1 424 871 424 bytes free

C:\Users\JUser\Documents\NetBeansProjects\HelloWorld\src>java helloworld/HelloWorld
Welcome to Java Programming!

C:\Users\JUser\Documents\NetBeansProjects\HelloWorld\src>



Автор: Aellipsis 10.10.2011, 21:54
У меня получается запустить консольное приложение с кодом
Код

package MyPackage;

public class MyClass 
{
    public static void main(String[] arguments)
    {
        System.out.println("123");
    }
}

Соответственно запуск:
1)переход на ИмяПриложения\build\classes
2)java MyPackage/MyClass

Но с десктопным приложением так не получается.
Я делаю так. File-> new project ->java desktop application, имя temp
Соответственно в пакете temp находится main:


Код

package temp;

public class TempApp extends SingleFrameApplication {
    public static void main(String[] args) {
        launch(TempApp.class, args);
    }
}



Делаю все аналогично консольному приложению.
1)переход на temp\build\classes
2)java temp/TempApp
и получаю java.lang.NoClassDefFoundError как автор.

Автор: Skipy 11.10.2011, 16:41
Цитата(Aellipsis @ 10.10.2011,  21:54)
2)java temp/TempApp
и получаю java.lang.NoClassDefFoundError как автор.

http://www.skipy.ru/technics/likbez.html

Автор: Aellipsis 15.10.2011, 19:10
Почитал, для консольного приложения, созданного в netbeans выполняется:
Код

java -classpath ./build/classes MyPackage.MyClass

а для десктопного нет:
Код

java -classpath ./build/classes tempgui.TempGUIApp


Автор: math64 15.10.2011, 20:52
Чтобы запускать приложение не из NetBeans, советую создать jar файл, в меню есть пункт "Построить проект" и "Очистить и построить проект" вместо "Запустить проект".
Тогда в папке проекта создастся папка dist, в ней основной jar файл, папка lib с jar необходимых библиотек или пустой и readme.txt, описывающий как это запустить:
java -jar "<имя файла>.jar"

Автор: Aellipsis 15.10.2011, 22:16
math64, Спасибо. Но все-таки хотелось бы узнать почему с *.class не работает

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)