Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: GUI и Java FX приложения > JTextPane+Html+ссылки


Автор: filipp76 3.6.2007, 11:11
Такой вопрос, у меня есть JTextPane(text/html), я загружаю туда картинки таким тэгом 
"<img src=http://image.com.ua/img/0.gif>"
Как сделать ссылки на картинку которая лежит в *.jar?(надо заменить сылку на файл с сервера на файл в *.jar).Или хотябы заменить её на локальную ссылку. Я гдет видел такое, вроде надо использовать URL. Приведите пример пожалуйста. 

Автор: filipp76 3.6.2007, 14:42
Поюзал поиск и не нашел можно ли загрузить рисунок с *.jar. Но нашел такое
 <img src="file:///0.gif">
Но почему-то не работает((. Это правильно написано? И где должен лежать файл?

Автор: cromm3 3.6.2007, 15:29
Цитата

И где должен лежать файл?


в корне диска, на котором расположено приложение.

Соответственно из jar тянем также <img src="file:///0.gif"> файл 0.gif располагается в верхнем уровне jar.

Автор: filipp76 3.6.2007, 17:01
Цитата(cromm3 @  3.6.2007,  15:29 Найти цитируемый пост)
в корне диска, на котором расположено приложение.Соответственно из jar тянем также <img src="file:///0.gif"> файл 0.gif располагается в верхнем уровне jar.


Не работает ни при каких условиях...(

Добавлено через 9 минут и 10 секунд
Вот сам html код
Код

<html>
  <head>    
  </head>
  <body>
    <b><font color="RED">filipp (03.05.2007 17:08:22)</font></b><br><b>Hello<img src="file:///0.gif"></b><br>
  </body>
</html>


Файл 0.gif лежит весде и в *.jar и в корне приложения, все равно не выводится((

Автор: cromm3 3.6.2007, 17:57
Можно пример того как добавляется html в JTextPane? Может там проблема...

Автор: nornad 3.6.2007, 18:16
Попробуй file:///c:/0.gif

Добавлено через 2 минуты и 41 секунду
Как в жаре путь указать - не знаю. Возможно, так: file:///c:/my_jar.jar/0.gif

Автор: filipp76 3.6.2007, 18:33
Цитата(cromm3 @  3.6.2007,  17:57 Найти цитируемый пост)
Можно пример того как добавляется html в JTextPane? Может там проблема...

Тэг читается правильно выводится просто квадратик без иконки, если пишу например  <img src="www.server.com/1.gif">  то все работает, значит проблема все-таки не тут.

Цитата(nornad @  3.6.2007,  18:16 Найти цитируемый пост)
Попробуй file:///c:/0.gif

Так работает, но я не могу всегда указывать точный путь, ведь у всех приложение будет лежать в разных каталогах. Как получить тогда путь к *.jar? Но я считаю что все должно быть проще. 

Цитата(nornad @  3.6.2007,  18:16 Найти цитируемый пост)
Как в жаре путь указать - не знаю. Возможно, так: file:///c:/my_jar.jar/0.gif

Так не работает.


Автор: filipp76 3.6.2007, 21:50
Ничего не понимаю smile , как не пытаюсь ничего не получается, перепробовал уже все варианты. Работает только с явным указание пути к файлу, и то в каталоге, а не *.jar. Помогите пожалуйста решить проблемму, перегуглил все что можно ,множество народа стыкается с данной проблемой но решения я не нашел.

Добавлено через 13 минут и 2 секунды
Так можно загрузить картинку с каталога с программой "<img src=\"file:s0.gif\">" Но как загрузить с *.jar беспонятия(((

Автор: nornad 4.6.2007, 00:50
Цитата(filipp76 @  3.6.2007,  21:33 Найти цитируемый пост)
Цитата(nornad @  3.6.2007,  18:16 Найти цитируемый пост)
Как в жаре путь указать - не знаю. Возможно, так: file:///c:/my_jar.jar/0.gif

Так не работает.

А поиск по форуму пробовал?
http://forum.vingrad.ru/index.php?showtopic=134412&view=findpost&p=1024533, что я нашёл за десять минут:
Код

jar:file:/C:/path/my.jar!/res/img/pic.jpeg

Автор сего варианта - LSD.

Автор: filipp76 4.6.2007, 07:47
Цитата(nornad @  4.6.2007,  00:50 Найти цитируемый пост)
jar:file:/C:/path/my.jar!/res/img/pic.jpeg

Это все хорошо но файл *.jar могут переименовать и путь может поменятся. Скажите пожалуйста тогда как получить имя *.jar и путь к ней, должны же быть для этого методы.

Автор: nornad 4.6.2007, 13:37
Цитата(filipp76 @  4.6.2007,  10:47 Найти цитируемый пост)
Это все хорошо но файл *.jar могут переименовать и путь может поменятся.

А ещё могут переименовать сам файл картинки, вытащить его из жара. Или ещё хуже - запустят совсем другое приложение. Или совсем плохо - пришельцы вдруг прилетят и подарят 500 эскимо.
Я бы сделал проще - проверял, есть ли нужный мне жар в одном из нужных мест. Если нету - юзер дурак и пусть возвращает всё как было. Не хочет - его проблемы. Поломать всегда можно любую систему. А делать защиту от совсем дураков, имхо, не стоит. Твои пользователи же не переименовывают системные длл в винде? Так почему надо разрешать им жары переименовывать?
А если это ты можешь переименовать в будущем жарку, то добавь в неё класс с методом, который будет возвращать имя жарки (просто строку руками вбей). А может, даже есть возможность программно определить имя жарки, в которой класс лежит. Тогда ещё проще.

Добавлено через 1 минуту и 38 секунд
И, кстати, первоначально вопрос был:

Цитата(filipp76 @  3.6.2007,  14:11 Найти цитируемый пост)
Как сделать ссылки на картинку которая лежит в *.jar?(надо заменить сылку на файл с сервера на файл в *.jar).Или хотябы заменить её на локальную ссылку.


Аппетит приходит во время еды.  smile 

Автор: filipp76 4.6.2007, 14:50
Мдя я много не прошу, например в Delphi есть функция Application.Exename() - возвращает полный путь к файлу вместе с именем *.exe, я верен что чтот подобное должно быть и в Java. Ну не верю я что надо четко прописывать путь ! Такого просто не бывает, фиг уже с тем именем джарки, но говорить пользователю что программа должна лежать в таком-то каталоге, это просто глупо!
Код

jar:file:/my.jar!/res/img/pic.jpeg

Почему так не работает???

Добавлено через 5 минут и 13 секунд
Проверьте пожалуйста у себя, может я тэг как-то не правильно пишу, буду очень признателен..

Автор: fixxer 4.6.2007, 16:26
Господа, по моему скромному мнению, вы загнались.
Для доступа к ресурсу достаточно, чтобы он был в classpath'е и знать относительный путь к нему.

Код

getClass().getResource("<realative path>/<resource name>");


Например:

1) Ресурс находится в основном jar'е с путем в img/picture.gif

Код

getClass().getResource("img/picture.gif");


2) Ресурс находится в другом jar'e, например resources.jar рядом с нашим

Код

getClass().getResource("img/picture.gif");


Но запускаем:

Код

java -cp ./ourjar.jar;./resouces.jar <our main class name>


3) На диске в c:\img\picture.gif

опять таки:

Код

getClass().getResource("img/picture.gif");


Но запускаем:

Код

java -cp с:/;./ourjar.jar <our main class name>


Автор: Hidrag 4.6.2007, 16:38
Код

<img src=jar:file:"+path+"!/skin/custom/friends.gif><html>


Путь можно определить по тому классу, который тебе нужен. Предположим (гипотетически), что внутри искомого jar лежит класс java.util.Set. Тогда путь к jar можно получить так:
Код

String u = this.getClass().getResource("/java/util/Set.class").getFile();
String a = u.substring(u.indexOf('/'));
String b = a.substring(0, a.indexOf('!'));
String c = b.substring(0, b.lastIndexOf('/'));
        
System.out.println(c);

Автор: nornad 4.6.2007, 18:03
fixxer, ты тему читал? Вопрос был про то, как в JTextPane в стандартном теге img отобразить картинку из жарки, а не про то, как её вообще загрузить из жарки.

Hidrag, я подозревал, что что-то подобное можно сделать (определить путь к классу), но никогда сам с этим не игрался. В любом случае спасибо - теперь будет возможность подсмотреть при необходимости.  smile 

Автор: filipp76 4.6.2007, 18:58
Hidrag, Огромное спасибо, интересный подход и что самое главное все отлично работает!

Автор: Hidrag 4.6.2007, 22:47
user posted image
Я сам недавно парился с похожей проблемой  smile в памяти свежо было, порылся в своей базе знаний (цитатник с форума) и нашел smile

Автор: fixxer 4.6.2007, 23:27
Цитата(nornad @ 4.6.2007,  18:03)
fixxer, ты тему читал? Вопрос был про то, как в JTextPane в стандартном теге img отобразить картинку из жарки, а не про то, как её вообще загрузить из жарки.

А я картинку и не грузил. Кто мешает полученный с помощью getClass().getResource URL подставить в тэг и не париться со всякими jar:file:/my.jar!/res/img/pic.jpeg

Автор: Hidrag 4.6.2007, 23:36
fixxer, попробуй! Если получится будем тебе очень признательны, честно!
Задача для простоты такая нужно подгрузить картинку из JAR и вывести его в в Лэйбле при этом не setIcon()  а setText("<html>картинка<html>");

Автор: fixxer 5.6.2007, 09:35
Код

...
URL url = getClass().getResource("/img/picture.gif");
JLabel label = new JLabel("<html><img src=" + url + ">");
...


Опять таки при условии что /img/picture.gif доступно по classpath, причем неважно jar это или каталог на диске.

Автор: filipp76 5.6.2007, 14:19
Цитата(fixxer @  5.6.2007,  09:35 Найти цитируемый пост)
URL url = getClass().getResource("/img/picture.gif");JLabel label = new JLabel("<html><img src=" + url + ">");

Вечером попробую, если работает то отлично! Хотя я не понимаю, url это же не String!? потому
 
Код

String str="<img src="+url+">";// Будет ли это работать?

Автор: fixxer 5.6.2007, 15:42
Цитата(filipp76 @ 5.6.2007,  14:19)
Хотя я не понимаю, url это же не String!? потому
 
Код

String str="<img src="+url+">";// Будет ли это работать?

При конкатенации строки с любым Object неявно вызывается метод  toString()

Автор: filipp76 5.6.2007, 16:50
fixxer, спасибо! Твой вариант самый просто идеальный)!

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