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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Не могу загрузить картинки в Applet 
:(
    Опции темы
sidiakin
Дата 28.1.2010, 23:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Подскажите пожалуйста! Вот пример:

Код

import java.applet.*;
import java.awt.*;
import java.net.*;
public class Test extends Applet {
    private Image myImage;
    private URL ImageURL;

    public void init() {
        resize(250,250);
    try {
        ImageURL = new URL("img.GIF");
    }
    catch (MalformedURLException e) {}
    myImage = getImage(ImageURL);
    }
    public void paint(Graphics g) {
        g.drawImage(myImage,0,0,this);
    }
}


Файл html, class, img.gif находяться на диске. Браузер картинку отображать не хочет, а javaviewer открывает пустое окно и снизу пишет "Applet not initialized". 
Подскажите, что не так?
PM MAIL   Вверх
dobrolub
Дата 29.1.2010, 20:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 385
Регистрация: 18.12.2009
Где: Vancouver, Canada

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



в html попробуй указать свойства codebase и archive, и пусть они оба специфицируют текущую директорию

Код

<html>
<body>
<applet codebase="." archive="."
        code="Test" width="250" height="250">
  </applet>
</body>
</html>


в аплете для imageUrl лучше использовать getCodeBase() + "/img.gif";
Код

import java.applet.*;
import java.awt.*;
import java.net.*;
public class Test extends Applet {
    private Image myImage;
    private URL ImageURL;
    public void init() {
        resize(500,500);
        try {
            ImageURL = new URL(getCodeBase() + "/img.GIF");
        }
        catch (MalformedURLException e) {}
        myImage = getImage(ImageURL);
    }
    public void paint(Graphics g) {
        g.drawImage(myImage,0,0,this);
    }
}



поглядеть на аплет можно appletviewer (ом) - он стартует с консолью (для Exceptions smile )
appletviewer test.html 



Это сообщение отредактировал(а) dobrolub - 29.1.2010, 20:47
PM   Вверх
sidiakin
Дата 30.1.2010, 08:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Все заработало после добавления getCodeBase(). Спасибо. Я этот метод уже пробовал, но видимо еще не разобрался в прогр. Java . В справке я выяснил что это public метод типа URL и все. вот я и пробовал getCodeBase(img.gif). Я даже прочитать это не могу. Поясните пожалуйста, как это работает. В справке покопался, но ничего не понял. Подскажите, какой конструктор используется при создании URL и как работает вызов метода со знаком + ? 

Это сообщение отредактировал(а) sidiakin - 30.1.2010, 09:14
PM MAIL   Вверх
dobrolub
Дата 30.1.2010, 08:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 385
Регистрация: 18.12.2009
Где: Vancouver, Canada

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



Ура!
PM   Вверх
sidiakin
Дата 30.1.2010, 09:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Т.е. я создаю объект URL с конструктором URL(String), где стринг это адрес хоста. А если я подставляю getCodeBase(), то он передает тек. адрес до файла .class. И если у меня файл на C:\ то он и возр. этот путь? А как же безопасность? 
PM MAIL   Вверх
dobrolub
Дата 30.1.2010, 09:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 385
Регистрация: 18.12.2009
Где: Vancouver, Canada

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



У URL несколько конструкторов, в том числе те, что принимают просто String. getCodeBase() – метод аплета возвращает String, к которому добавляется "/img.GIF". Когда аплет загружается с сервера, JVM-плагин для браузера читает откуда загрузился аплет и устанавливает это значение для свойства апплета codeBase. В данном случае это директория. URL сконструированный только с img.GIF не имеет точки отсчёта. CodeBase в этом случае даёт такую точку отсчёта. Например, если html файл лежит в директории c:\temp то URL будет "file:///c:/temp", a URL картинки "file:///c:/temp/img.GIF.

Если ещё не обзавелись книжкой Брюса Эйккеля - скачайте или купите. Очень хорошая книга.

http://forum.vingrad.ru/forum/topic-84146.html

Добавлено через 5 минут и 14 секунд
А безопасность обеспечивается тем, что по-умолчанию JVM не пустит в директории выше codebase. To-есть, из директории c:/temp выше нельзя подняться, в том числе с помощью ..  C:\temp\..\img.GIF. – не пустит. c:\ - тоже не должен быть виден, если только не прописать расширенный доступ в файле разрешений.
Удачи!
PM   Вверх
sidiakin
Дата 31.1.2010, 09:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Подскажите, как читать эту строку:

Float.valueOf(String).floatValue();

Float.valueOf(String) - это понятно. valueOf(String) преобразует строку к типу Float.
Мне непонятно, как мы вызываем 2-а метода через точку.


Это сообщение отредактировал(а) sidiakin - 31.1.2010, 09:58
PM MAIL   Вверх
dobrolub
Дата 31.1.2010, 09:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 385
Регистрация: 18.12.2009
Где: Vancouver, Canada

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



Float.valueOf() возвращает объект типа java.lang.Float. a .valueOf() уже вызывается на объекте типа java.lang.Float(). В длинной форме это можно записать как:

//object
Float n = Float.valueOf("123.123");

//primitive
float f = n.floatValue();
PM   Вверх
sidiakin
Дата 31.1.2010, 10:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Вот, как Вы написали мне понятно. А то, что можно через точку я не знал.

В книгах пишут: доступ к членам класса осущ. через точку. Вот у меня и сложилось впечатление, что в методе valueOf() есть метод floatValue().  

Эйккеля уже читаю, но до этого еще не дашел.

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

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

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


 




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


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

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