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


Автор: MekS 8.5.2006, 15:44
Начал писать на Java. Написал "Hello world". Скомпилировал, а запустить не могу. Выдает Exception in thread "main" java.lang.NoSuchMethodError: main. В чем может быть причина? main в коде я указал. 

Автор: powerOn 8.5.2006, 16:18
ну давай, рассказывай, как запуск программы делаешь.... 

Автор: Бонифаций 8.5.2006, 17:03
покажите свой "hello world" в исходниках. 
main должен быть public static void main(String[] argv). Он точно такой? 

Автор: MekS 9.5.2006, 10:01
Код
class helloWorld
{
  public static void main(String arg[])
  {
    System.out.println("Hello World!");
  }
}

Вот мой код  

Автор: JUncle 9.5.2006, 11:45
MekS, этот вопрос был первичным:

Цитата(MoonCat @  8.5.2006,  16:18 Найти цитируемый пост)
ну давай, рассказывай, как запуск программы делаешь....  


Или неправильно указываешь имя класса, или classpath. Так что, колитесь  smile
 

Автор: batigoal 9.5.2006, 17:52
Цитата(MekS @  9.5.2006,  11:01 Найти цитируемый пост)
String arg[]

Вроде я всегда args писал...

Ну и строку запуска наконец покажи smile 

Автор: powerOn 9.5.2006, 18:05
Цитата

Выделить всёкод Java
    
class helloWorld
{
  public static void main(String arg[])
  {
    System.out.println("Hello World!");
  }
}

Вот мой код   


Класс должен иметь модификатор public.

Добавлено @ 18:06 
Цитата

Цитата(MekS @  9.5.2006,  11:01 Найти цитируемый пост)
String arg[]

Вроде я всегда args писал...


А какая разница между arg и args?? Это на что влияет? 

Автор: batigoal 9.5.2006, 18:13
Цитата(MoonCat @  9.5.2006,  19:05 Найти цитируемый пост)
А какая разница между arg и args?? Это на что влияет?  

А я вот не знаю, входит ли это в сигнатуру вызываемого метода. Щас попробую. 

Проверил - нет, не влияет. 

Автор: ALKS 9.5.2006, 18:14
ну на размер иcходника точно влияет smile  

Автор: bougle 9.5.2006, 19:40
Сейчас сделал програмку в NetBeans, собрал ее в jar файл, а при попытке ее открытия вылазит окошечко "could not find main class" Я до этого просто из NetBeans запускал и все работало.
Для интереса попробовал откомпилировать и запустить вышепреведенную програмку из командной строки. Ошибка такая же.
Код я изменил, так что к нему уже не придерешься:
HelloWorld.java
Код

public class HelloWorld
 {
  public static void main(String[] arg)
   {
    System.out.println("Hello World!");
   }
 }


Набрал в cmd javac HelloWorld.java получил файл HelloWorld.class
набрал java HelloWorld получил вот что:
Код

Exception in thread "main" java.lang.UnsupportedClassVersionError: HelloWorld (U
nsupported major.minor version 49.0)
        at java.lang.ClassLoader.defineClass0(Native Method)
        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$100(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)
        at java.lang.ClassLoader.loadClassInternal(Unknown Source)

Значит проблемы в кривоустановленной jvm? Я же вроде все правильно сделал?

Добавлено @ 19:48 
classpath..... эээ... Блин. Точно. Дело только в этом. 

Автор: LSD 9.5.2006, 23:05
Цитата(MoonCat @  9.5.2006,  19:05 Найти цитируемый пост)
Класс должен иметь модификатор public.

Нет не должен. Вообще этот код верный, проблема в том как его запускают.

Ждем автора... 

Автор: Бонифаций 9.5.2006, 23:15
Цитата(bougle @  9.5.2006,  19:40 Найти цитируемый пост)
UnsupportedClassVersionError


похоже что вы компилируете одной версией явы (скажем  1.5) а пытаетесь выполнить совсем другйо более старой (скажем 1.4)- а нука нука покажите 

java -version

там где вы пытаетесь выполнить программу,
и vm: в netbeans в help->about>details 


 

Автор: batigoal 10.5.2006, 09:31
Цитата(LSD @  10.5.2006,  00:05 Найти цитируемый пост)
Нет не должен.

Разве? 

Автор: ALKS 10.5.2006, 10:04
Цитата(Lamer George @ 10.5.2006,  09:31)
Цитата(LSD @  10.5.2006,  00:05 Найти цитируемый пост)
Нет не должен.

Разве?

http://java.sun.com/docs/books/tutorial/getStarted/application/main.html

я не поленился и проверил - действительно работает прекрасно и без public. а я и не знал... smile 

Автор: chief39 10.5.2006, 13:01
Цитата(Lamer George @  9.5.2006,  18:13 Найти цитируемый пост)
А я вот не знаю, входит ли это в сигнатуру вызываемого метода. Щас попробую. 

Проверил - нет, не влияет. 


В сигнатуру входит имя метода, ТИП, КОЛИЧЕСТВО и ПОСЛЕДОВАТЕЛЬНОСТЬ параметров.
То есть для main важно имя и один параметр в виде массива стрингов. Имя не играет роли. То есть пофик smile
(Имя параметра имелось в виду smile )
  

Автор: MekS 10.5.2006, 17:39
Покопался в CLASSPATH, изменил , теперь выглядит так:
%JAVA_HOME%\JRE\LIB\rt.jar;D:\Tomcat\common\lib\servlet.jar;C:\j2sdk1.4.2_01\lib;C:\j2sdk1.4.2_01;D:\Test

PATH: C:\j2sdk1.4.2_01\bin; D:\Test

Ошибка, правда, теперь такая:
Exeption in thread main java.lang.NoClassDefFoundError: HelloWorld

java -version выдает:
java version "1.4.2_01"
JAVA™ 2 Runtime Enviroment, Standart Edition (build 1.4.2_01-b06)
JAVA HotSpot™ Client VM (build 1.4.2_01-b06, mixed mode)

может ошибка в настройке ClassPath?

Добавлено @ 17:43 
компилирую как: javac HelloWorld.java
Вызываю: java Helloworld 

Автор: powerOn 10.5.2006, 17:48
Цитата

компилирую как: javac HelloWorld.java
Вызываю: java Helloworld  


наверное вызавать надо java HelloWorld  так...

Добавлено @ 17:48 
хотя здесь все таки не в этом проблема... 

Автор: MekS 10.5.2006, 17:54
Цитата

наверное вызавать надо java HelloWorld  так...


Попробовал, эффект тот же.

Добавлено @ 18:05 
Получилось! smile 

Вызвал так: java -classpath HelloWorld

Только теперь не знаю что надо прописать в CLASSPATH чтобы вызывать без ключа. 

Автор: MekS 10.5.2006, 18:10
т.е. так: java -classpath . HelloWorld 

Автор: Alagert 11.5.2006, 11:12
Цитата(MekS @  10.5.2006,  18:10 Найти цитируемый пост)
т.е. так: java -classpath . HelloWorld  

Это у тебя происходит потому, что в classpath не добавлена текущая директория. Добавь в свой classpath \.
теперь все должно быть пучком 

Автор: Goganchic 27.1.2007, 12:42
И как всегда проблема в настройках окружения smile
Кстати, тут был пост про то, что компилится все жабой 1.5, а запускается 1.4. Ошибка будет только если ты используешь какие-то специфические методы, которых нет в старой версии JRE или же шаблоны, иначе все будет нормально.

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