PDA

Просмотр полной версии : Установка SDK и ошибка main



omnikar
03.03.2005, 17:19
Помогите пожалуйста чайнику. Пытаюсь начать программировать на Яве, но не могу отладить SDK правильно. Проблема в том что при компиляции java файлов (даже из примеров) создаются классы не пригодные для использования, т.е. если файл "name.java"

import java.awt.*;
import java.applet.*;
public class name extends Applet {
public void paint(Graphics g) {
g.drawString("000 Hello World!", 20, 20);
} }

я компелю как javac.exe name.java то получаю класс name.class который при запуске java.exe name выдает ошибку:

Exception in thread "main" java.lang.NoSuchMethodError: main

Причем пробывал компелить и так "javac.exe" -g -O -classpath C:\j2sdk1.4.1_07\lib "name.java". Все равно вылазиет эта ошибка!

А также если я обращаюсь к этому классу из html то тоже пишется что не найден класс name.class

Подскажите пожалуйста как это лечить?
Я установил:
j2sdk1.4.1_07

в autoexec.bat прописал:
SET CLASSPATH=.;C:\j2sdk1.4.1_07\lib;C:\j2sdk1.4.1_07\ jre\lib;C:\j2sdk1.4.1_07\jre\lib\rt.jar;C:\j2sdk1. 4.1_07\jre\lib\charsets.jar;C:\j2sdk1.4.1_07\jre\l ib\ext\dnsns.jar;C:\j2sdk1.4.1_07\jre\lib\jaws.jar ;C:\j2sdk1.4.1_07\jre\lib\jce.jar;C:\j2sdk1.4.1_07 \jre\lib\jsse.jar;C:\j2sdk1.4.1_07\jre\lib\ext\loc aledata.jar;C:\j2sdk1.4.1_07\jre\lib\ext\sunjce_pr ovider.jar;C:\j2sdk1.4.1_07\jre\lib\sunrsasign.jar

path C:\j2sdk1.4.1_07\bin

Подскажите что ему не хватает?

Absurd
03.03.2005, 17:30
Апплеты - это контролы, которые предназначены для выполнения в рамках веб-страницы. Например так:


<HTML>
<HEAD>
<TITLE>Example</TITLE>
</HEAD>
<BODY>
<h1>Applet-example:</h1>
<APPLET CODE='name.class' WIDTH=65% HEIGHT=250>
Ваш броузер не поддерживает апплеты Java.
</APPLET>
</BODY>
</HTML>

Ты же пытаешься запустить апплет как автономное приложение.

omnikar
03.03.2005, 17:58
Так я тоже пробовал запустить, но выдается что класс name.class не найден. Т.е. класс при компиляции создается какойто битый, не рабочий. В примерах есть исходник и класс HelloWorldApplet. Я удаляю HelloWorldApplet.class из этой папки где он был вместе с исходником и html и пробую из HelloWorldApplet.java скомпелить такой же класс, но в итоге получаю класс который отличается от приведенного в примере по размеру и не работает при вызове из HelloWorldApplet.html, броузер показывает в строке статуса (при наведеннии мыши на апплет) что не может найти класс. Может я компиляцию не правильно делаю?

Deady
03.03.2005, 20:29
попробуй так:

import java.io.*;

public class HelloWorld {

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

сохрани файл под именем HelloWorld.java. (Регистр важен)
теперь

javac HelloWorld.java
java HelloWorld

Oscar
03.03.2005, 20:32
omnikar,
расскажу как я только что откомпилировал и как у меня заработало.
Может чем-то поможет, может наведёт на нужную мысль.

Папка D:\JavaApplet
В ней есть файл name.java

import java.awt.*;
import java.applet.*;
public class name extends Applet {
public void paint(Graphics g) {
g.drawString("000 Hello World!", 20, 20);
} }

JDK у меня лежит в E:\jdk1.5.0

Пути, кажется, не настроены.

Находясь в папке D:\JavaApplet в коммандной строке пишу:

e:\jdk1.5.0\bin\javac D:\JavaApplet\name.java

Создаю в той же папке файл test.html:

<HTML>
<HEAD>
<TITLE>Example</TITLE>
</HEAD>
<BODY>
<h1>Applet-example:</h1>
<APPLET CODE='name.class' WIDTH=65% HEIGHT=250>
Ваш броузер не поддерживает апплеты Java.
</APPLET>
</BODY>
</HTML>

Ввожу в броузере:

file:///D:/JavaApplet/test.html

Всё работает.
Попробуй как можно точнее придерживаться этой процедуры, если не заработает - пиши :D

Deady
03.03.2005, 20:35
кстати.
public void paint(Graphics g)
Paints the container. This forwards the paint to any lightweight components that are children of this container.

If this method is reimplemented, super.paint(g) should be called
--------------------------------------------------------------------------
so that lightweight components are properly rendered. If a child component is entirely clipped by the current clipping setting in g, paint() will not be forwarded to that child.

omnikar
03.03.2005, 23:13
Спасибо Deady, как Вы предложили так у меня работает, у меня не хочет апплет в броузере отражаться.

Oscar, сделал все как Вы сказали:
1. Создал C:\j2sdk1.4.1_07\jre\name.java
2. Запустил: C:\j2sdk1.4.1_07\bin\javac C:\j2sdk1.4.1_07\jre\name.java
3. Создал: C:\j2sdk1.4.1_07\jre\test.html
4. Запустил: file:///C:/j2sdk1.4.1_07/jre/test.html

Но увы опять пишет что class name not found
Может у меня броузеру что нужно, а ведь из примера (готовые) классы запускает нормально из любой папки.

Причем надо отметить что запуск
appletviewer test.html
удается нормально

Kolinus
04.03.2005, 00:46
фишка в настройках браузера может быть
майкрософт лишили лицензии на ява машину, но в настройках эксплорера можно указать - использовать для апплетов определенную ява машину

omnikar
04.03.2005, 03:20
Мне кажется врядли, если бы это были настройки броузера (кстати у меня это Explorer 5.5 уже со встроеной ява машиной), то все бы апплеты не шли, а может это компиляция всеже у меня както криво идет? Для нагляности обычный пример (гдето скачал не помню):

import java.awt.*;
import java.applet.*;
public class HelloWorldApplet extends Applet {
public void paint(Graphics g) {
g.drawString("Hello World!", 20, 20);
} }

Здесь выложен апплет с оригинальным классом HelloWorldApplet.class (который уже был в примере):
http://iptop.net/3/HelloWorldApplet.html
И все здесь идет замечательно

А вот апплет имеет класс HelloWorldApplet.class скомпилированный мной из исходника javac HelloWorldApplet.java:
http://iptop.net/4/HelloWorldApplet.html
И у меня здесь показывается что не найдено класса HelloWorldApplet

Причем в исходном случае класс весил 430 байт, а в том что я скомпелировал всего 388 байт, может надо как то подругому компилировать?

AiK
04.03.2005, 05:20
Explorer 5.5 уже со встроеной ява машиной
версии 1.1

Запустил: C:\j2sdk1.4.1_07\bin\javac
версия 1.4
И чего вы хотите от бедного ослика ИЕ?
В FireFox со свежим плагином (1.5) всё нормально работает. Отображает 000 Hello World!

omnikar
04.03.2005, 12:07
Скажите пожалуйста, а как (или чем) нужно скомпилировать класс чтобы он был такойже как и в исходном примере пригодный для IE 5.50.4134.0600?

AiK
04.03.2005, 13:30
javac -target 1.1
подробнее тут:
http://java.sun.com/j2se/1.5.0/docs/tooldocs/windows/javac.html#options

omnikar
04.03.2005, 22:45
Спасибо! Хотя при вызове javac -target 1.1 выдается ошибка
javac: target release 1.1 conflicts with default source release 1.5
Однако проблему удалось решить с компиляцией
javac -target cldc1.0 name.java

Правдо интересно почему компилятор ругается когда ему даешь
javac -target 1.1
на сколько я понимаю для этого и есть эта опция чтобы компилировать для разных версий ява?

Oscar
04.03.2005, 23:24
omnikar,
не знаю, почему компилятор ругается, но для разных версий можно компилировать ещё и так:
javac -source 1.4 name.java

Может поможет.

Kolinus
06.03.2005, 01:04
Эксплореру можно сказать использовать внешнюю ява машину (помогает)
только машина должна быть старше чем 1.3 а эксплорер вроде начиная с пятого (у меня шестой - там 100% настраивается)

AiK
06.03.2005, 18:52
Kolinus, вообще-то для этих целей Java VM можно как ActiveX вызывать (тэг object, а не applet). C 4-ой версии IE точно.