Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Файлы .jar 
:(
    Опции темы
Shorr Kan
Дата 9.1.2004, 07:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 30
Регистрация: 30.12.2003

Репутация: нет
Всего: нет



В \demo\jfc\ лежат файлы .jar. Они запускаются именно приложением. При компилировании же моего кода - создается файл .class. Правильно ли я понял, что вот эти мои .class только для консоли, а, если я хочу получить win-окно с приложением, то должен превратить свой .class в .jar? Если правильно, то как это сделать? Если нет, то что это за .jar такие?
PM MAIL   Вверх
Shorr Kan
Дата 9.1.2004, 08:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 30
Регистрация: 30.12.2003

Репутация: нет
Всего: нет



Так, дополняю:

Собрал приложение, и получил-таки НЕ консольное окошко (но с без .jar. С ними так ничего и не понимаю). Вот приложение:


import java.awt.*;

public class win
{
public static void main(String args[])
{
MainFrameWnd frame = new MainFrameWnd("Win1");
frame.show();
}
}

class MainFrameWnd extends Frame
{
public MainFrameWnd(String sTitle)
{
super(sTitle);
}
}




Если же после строки
super(sTitle);
добавляю
setSize(400, 200);
То дает следующую ошибку:

Error:win.java(8):Method setSize(int, int) not found in class MainFrameWnd.


В чем тут дело?

PM MAIL   Вверх
SmaLL
Дата 9.1.2004, 08:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник Клуба
Сообщений: 557
Регистрация: 17.12.2002
Где: Voronezh

Репутация: 1
Всего: 2



Надо читать API-доку

Нет такого метода setSize(int x, int y)
Есть метод public void setSize(Dimension d)
Соответственно надо писать:
Цитата
this.setSize(new Dimension(400, 200));




--------------------
Что ни делается - всЁ к лучшему! SmallWeb
Мой адрес не дом и не улица, мой адрес родной пивзавод!
PM MAIL WWW ICQ   Вверх
Shorr Kan
Дата 9.1.2004, 11:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 30
Регистрация: 30.12.2003

Репутация: нет
Всего: нет



И вот что выдает:

Error:win.java(17):Method setSize(java.awt.Dimension) not found in class MainFrameWnd.
Info : this.setSize(new Dimension(400, 200));

PM MAIL   Вверх
AntonSaburov
Дата 9.1.2004, 12:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Штурман
****


Профиль
Группа: Модератор
Сообщений: 5658
Регистрация: 2.7.2002
Где: Санкт-Петербург

Репутация: 51
Всего: 118



Можно посмотреть в Java FAQ Вопрос: С чего начать, чтобы написать простое приложение для Swing

А вместо setSize использовать setBounds(100,100,200,200)
PM MAIL WWW ICQ   Вверх
DarkDS
Дата 9.1.2004, 13:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник Клуба
Сообщений: 748
Регистрация: 6.5.2003
Где: Таллинн, Эстония

Репутация: 11
Всего: 16



Цитата(Shorr @ 9.1.2004, 07:31)
В \demo\jfc\ лежат файлы .jar. Они запускаются именно приложением. При компилировании же моего кода - создается файл .class. Правильно ли я понял, что вот эти мои .class только для консоли, а, если я хочу получить win-окно с приложением, то должен превратить свой .class в .jar? Если правильно, то как это сделать? Если нет, то что это за .jar такие?

jar файл это архив класс файлов.
То есть приложение запускатся может как из jar файлов так и просто из класс файловь. Преимушество jar файлов в том что
1. вместо россыпи файлов у тебя всего 1 файл.
2. jar файлы можно подписывать (для запуска приложений с повышенными правми в вебстарте нужны подписанные файлы)
3. можно задать майн класс (сокращает строку запуска)

по своей струкутре jar файл - обычный зип файл. Правда помимо класс файлов там еще лежит каталог MetaInf в котором находится Manifest.mf (описатель jar файла) и могут находится файлы подписи.
Майн класс прописывается в Manifest.mf.

Самый простой способ создать jar файл:
Создать test.jar и добавить в него test.class:
jar -cvf test.jar test.class

Создать test.jar и добавить в него все файлы и каталоги из каталога test:
jar -cvf test.jar -С test/

использование: jar {ctxu} [jar-file] [manifest-file] [-C dir] files ...

Опции для jar команды
-c Создать новый архив
-t показать содержимое архива
-x распакавать названный файл ( или все)из архива
-u изменить созданный архив
-v вывести статистику
-f задать имя архива
-m добавить созданный майнфест
Там есть еще пара, но это основыне.
PM MAIL   Вверх
Shorr Kan
Дата 10.1.2004, 06:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 30
Регистрация: 30.12.2003

Репутация: нет
Всего: нет



Ой, получилось smile.gif Использовал метод resize(400, 200);
Но возник следующий вопрос... Новый топик smile.gif
PM MAIL   Вверх
Shorr Kan
Дата 3.2.2004, 03:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 30
Регистрация: 30.12.2003

Репутация: нет
Всего: нет



Не получается создать jar-архив.

C:\j2sdk1.4.2_03\bin>javac StartApp.java

C:\j2sdk1.4.2_03\bin>java StartApp


Тут все работает. Далее:

C:\j2sdk1.4.2_03\bin>jar cvf svm.jar StartApp.class
added manifest
adding: StartApp.class(in = 845) (out= 559)(deflated 33%)


И теперь, после запуска svm.jar, выдает ошибку:

Failed to load Main-Class manfest attribute from C:\j2sdk1.4.2_03\bin\svm.jar

Что такое?
PM MAIL   Вверх
AntonSaburov
Дата 3.2.2004, 14:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Штурман
****


Профиль
Группа: Модератор
Сообщений: 5658
Регистрация: 2.7.2002
Где: Санкт-Петербург

Репутация: 51
Всего: 118



Цитата
И теперь, после запуска svm.jar, выдает ошибку:

А строчку запуска можешь показать ?
А лучше всю последовательность действий расписать подробнее.
Да и в архив лучше все-таки пакет класть. А у тебя класс верхнего уровня - с ним всегда какие-то заморочки, если есть jar.
PM MAIL WWW ICQ   Вверх
Гость_Shorr Kan
Дата 4.2.2004, 05:46 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Строчку запуска? А просто два клика на .jar ... Остальные-то ведь так работают. Я думал, что и мой должен бы...

Последовательность:

Архивирую в .jar рабочий .class . Он превращается в такой вот нерабочий .jar ... Подробнее некуда, честно говоря.

Что значит "пакет класть"?
  Вверх
AntonSaburov
Дата 4.2.2004, 11:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Штурман
****


Профиль
Группа: Модератор
Сообщений: 5658
Регистрация: 2.7.2002
Где: Санкт-Петербург

Репутация: 51
Всего: 118



Цитата
Строчку запуска? А просто два клика на .jar ... Остальные-то ведь так работают. Я думал, что и мой должен бы...

Для того, чтобы запустить jar в нем есть такой каталог - META-INF.
В нем есть файл - MANIFEST.MF.
И вот если его посмотреть, то там должен быть написано Main-Class:<имя класса>
И вот если это тот класс, который нужно, то по и дее должно все запускаться. Если же нет там такого - то само собой ничего не запустится.

Видимо еще один вопрос надо будет в FAQ положить smile.gif Но позже.

А сейчас главное - ты похоже пользуешься JBuilder или еще чем-то похожим. Так вот в JAR-файл кроме классов входит так называемый manifest - каталог META-INF, в котором находится файл MANIFEST.MF.
В этом файле хранится достаточно много полезной информации. В том числе может хранится имя класса, который имеет метод main и его надо запускать.

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

Для примера создадим простенькое приложение:
Выделить всёкод Java
1:
2:
3:
4:
5:
6:
7:
public class MyClass
{
    public static void main(String[] args)
    {
        System.out.println("Hello, world!");
    }
}


Соберем его с помощью команды javac MyClass.java
Получим MyClass.class. Можно проверить его работоспособность запустив java MyClass

Теперь мы хотим всезапаковать в JAR. Для этого надо не просто его упаковать, но и указать класс, который будет главным и мы тогда сможем запускать наш jar командой такого плана java -jar <имя jar-файла>.

Для этого создадим обычный текстовый файл, например mf.txt, и запишем туда две строчки
Выделить всёкод Java
1:
2:
Manifest-Version: 1.0
Main-Class: MyClass


И вот теперь создадим jar-файл с указанием того, чтобы при создании манифеста использовалась информация из mf.txt. Вот эта команда

jar cvfm My.jar mf.txt MyClass.class

с - создать архив
v - показывать сообщения
f - создать арзив в файле
m - использовать текстовый файл для включения в манифест
My.jar - имя архива
mf.txt - имя файла с информацией для манифеста
MyClass.class - имя файла, включаемого в архив. Можно здесь использовать маску (*, ? и прочая)

И вот мы получили My.jar

Теперь для запуска мы можем использовать строку такого вида
java -jar My.jar

Вот и все.

Цитата
Что значит "пакет класть"?

Это значит, что класть в поддиректории. И все классы будут через точку - типа java.awt.*
Но это уже отдельная тема - давай ты задашь этот вопрос в еще одном топике. А то и так тема уже не соответствует.
PM MAIL WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1008 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.