Мои лекции по Java (1998-2003)
Moderator: Shaos
-
- Supreme God
- Posts: 16680
- Joined: 21 Oct 2009 08:08
- Location: Россия
-
- Admin
- Posts: 24008
- Joined: 08 Jan 2003 23:22
- Location: Silicon Valley
sleepLavr wrote:Shaos, а есть какой-либо приём ЗАМЕДЛИТЬ выполнение программы на Java?
А то вроде как наблюдаю некий непринципиальный глючок при выводе на канвас,
но никак не пойму - есть ли он реально, и в чем заключается...
Хочется рассмотреть вывод приторможенно.
Я тут за главного - если что шлите мыло на me собака shaos точка net
-
- Supreme God
- Posts: 16680
- Joined: 21 Oct 2009 08:08
- Location: Россия
Странный глюк Жабы...
Отлаживал тут я программу на Жабе и странный глюк у неё: папка с языковой
поддержкой прямо на виду - в текущей директории, а Жаба-апплет её в упор
не находит...
Ну пришлось посмотреть, где он ищет - и тут я впал в ступпор:
Вот эта папка: C:\WINDOWS\¦L+++Lг TT+T\ которая к тому-же успешно открывается!
Что это может быть за фигня?
Предположил, что это русское что-то так отображается, но русских папок в
C:\WINDOWS\ всего две: Главное меню и Рабочий стол...
пробовал в них подложить LANGUAGES\EN.TXT - не подходит...
Какие могут быть предположения?
поддержкой прямо на виду - в текущей директории, а Жаба-апплет её в упор
не находит...

Ну пришлось посмотреть, где он ищет - и тут я впал в ступпор:
Code: Select all
92817 10:30:54 Iexplore FindClose C:\WINDOWS\¦L+++Lг TT+T SUCCESS
92818 10:30:54 Iexplore FindOpen C:\WINDOWS\¦L+++Lг TT+T\LANGUAGES NOTFOUND
92819 10:30:54 Iexplore Attributes C:\WINDOWS\¦L+++Lг TT+T\LANGUAGES\EN.TXT NOTFOUND

Что это может быть за фигня?

Предположил, что это русское что-то так отображается, но русских папок в
C:\WINDOWS\ всего две: Главное меню и Рабочий стол...
пробовал в них подложить LANGUAGES\EN.TXT - не подходит...
Какие могут быть предположения?

iLavr
-
- Supreme God
- Posts: 16680
- Joined: 21 Oct 2009 08:08
- Location: Россия
Самое странное, что после поиска папки с языковой поддержкой
LANGUAGES\EN.TXT по этому странному пути: C:\WINDOWS\¦L+++Lг TT+T\
апплет не ищет её больше нигде, что как-то совершенно нехарактерно!
По крайней мере должен поискать в своей текущей директории!
Но апплет выдаёт предупреждение:

После чего завершает работу...
Вдвойне странно, что если апплет запустить в лобовую:
Все папки и пути находятся правильно и без ошибок... 
PS. А кстати говоря, куда браузеры распаковывают апплет в архиве .JAR ?
По моим наблюдениям IE складывает .JAR-ы вот сюда:
C:\WINDOWS\Application Data\Sun\Java\Deployment\cache\javapi\v1.0\
Там есть 3 папочки: ext, file, jar, tmp.
Если запустить из IE .html-файл с апплетом, скажем, Clock.jar,
он появляется в папке:
C:\WINDOWS\Application Data\Sun\Java\Deployment\cache\javapi\v1.0\jar
в довольно странном виде:
Clock.jar-259e87a0-6cf5728c.zip
А вот куда архив .JAR разворачивается - не представляю...
Для корректной работы он же должен развернуться с сохранением внутренней
структуры папок апплета...
LANGUAGES\EN.TXT по этому странному пути: C:\WINDOWS\¦L+++Lг TT+T\
апплет не ищет её больше нигде, что как-то совершенно нехарактерно!

По крайней мере должен поискать в своей текущей директории!

Но апплет выдаёт предупреждение:

После чего завершает работу...

Вдвойне странно, что если апплет запустить в лобовую:
Code: Select all
@echo off
@java logicsim.App

PS. А кстати говоря, куда браузеры распаковывают апплет в архиве .JAR ?
По моим наблюдениям IE складывает .JAR-ы вот сюда:
C:\WINDOWS\Application Data\Sun\Java\Deployment\cache\javapi\v1.0\
Там есть 3 папочки: ext, file, jar, tmp.
Если запустить из IE .html-файл с апплетом, скажем, Clock.jar,
он появляется в папке:
C:\WINDOWS\Application Data\Sun\Java\Deployment\cache\javapi\v1.0\jar
в довольно странном виде:
Clock.jar-259e87a0-6cf5728c.zip
А вот куда архив .JAR разворачивается - не представляю...

Для корректной работы он же должен развернуться с сохранением внутренней
структуры папок апплета...
iLavr
-
- Devil
- Posts: 907
- Joined: 26 May 2003 06:57
А никуда. Так из zip-архива по одному файлу и читает.Lavr wrote:А вот куда архив .JAR разворачивается - не представляю...
Страничка эмулятора наших компьютеров
http://bashkiria-2m.narod.ru/
http://bashkiria-2m.narod.ru/
-
- Supreme God
- Posts: 16680
- Joined: 21 Oct 2009 08:08
- Location: Россия
Серьёзно?b2m wrote:А никуда. Так из zip-архива по одному файлу и читает.Lavr wrote:А вот куда архив .JAR разворачивается - не представляю...


Не то, чтобы я не верю, но дико как-то постоянно лазить за файлами в архив!

Опера, кстати, складывает архивы .JAR вот здесь:

Она их переименовывает на свой лад и где-то помечает...
Наверное внутри... в одном из файлов нашел текст: Clock.jar
iLavr
-
- Admin
- Posts: 24008
- Joined: 08 Jan 2003 23:22
- Location: Silicon Valley
-
- Supreme God
- Posts: 16680
- Joined: 21 Oct 2009 08:08
- Location: Россия
Это уже второе мнение...Shaos wrote:ну твоё озу заведомо больше размера джара - что джаве мешает его в память раздекодить?
1. Жаба постоянно лазиет в zip-файл.
2. Жаба удерживает распакованный архив в ОЗУ с сохранением струкуры папок.
Истина, наверное, где-то рядом... Как бы её поточнее узнать?
Вопрос-то у меня не праздный. Я ж смотрю - что подглюкивает в путях
файлов Жабёнок порой...
PS. Я не ленивый, я погуглил вопрос... но безрезультатно пока...

iLavr
-
- Supreme God
- Posts: 16680
- Joined: 21 Oct 2009 08:08
- Location: Россия
Тем не менее, похоже, что так и есть, и b2m совершенно прав!Lavr wrote:Не то, чтобы я не верю, но дико как-то постоянно лазить за файлами в архив!b2m wrote:А никуда. Так из zip-архива по одному файлу и читает.Lavr wrote:А вот куда архив .JAR разворачивается - не представляю...![]()
Для проверки запустил сложный по структуре апплет из примеров Джабы:
C:\WORK\j2sdk1_4\demo\plugin\jfc\Java2D\Java2Demo.jar
Запускал через файл Java2D.html из папки:
C:\WORK\j2sdk1_4\demo\plugin\jfc\
следующим кодом:
Code: Select all
<!-- CODEBASE - папка, где лежит Java2Demo.jar -->
<!-- внутри архива Java2Demo.jar есть папка java2d -->
<APPLET CODE = java2d.Java2DemoApplet.class
CODEBASE = "Java2D"
ARCHIVE = Java2Demo.jar
WIDTH = 710
HEIGHT = 540>
</APPLET>
В протоколе кроме сплошных обращений к файлу Java2Demo.jar с позиционированием
внутри этого файла ничего другого не обнаружил.
Code: Select all
9898 21:47:50 Iexplore FindOpen C:\WORK\J2SDK1_4\DEMO\PLUGIN\JFC\JAVA2D\JAVA2DEMO.JAR SUCCESS Java2Demo.jar
9899 21:47:50 Iexplore FindClose C:\WORK\J2SDK1_4\DEMO\PLUGIN\JFC\JAVA2D\JAVA2DEMO.JAR SUCCESS
9900 21:47:50 Iexplore Attributes C:\WORK\J2SDK1_4\DEMO\PLUGIN\JFC\JAVA2D\JAVA2DEMO.JAR SUCCESS GetAttributes
9901 21:47:50 Iexplore Attributes C:\WORK\J2SDK1_4\DEMO\PLUGIN\JFC\JAVA2D\JAVA2DEMO.JAR SUCCESS GetAttributes
9902 21:47:50 Iexplore Attributes C:\WORK\J2SDK1_4\DEMO\PLUGIN\JFC\JAVA2D\JAVA2DEMO.JAR SUCCESS GetAttributes
9903 21:47:50 Iexplore FindOpen C:\WORK\J2SDK1_4\DEMO\PLUGIN\JFC\JAVA2D\JAVA2DEMO.JAR SUCCESS Java2Demo.jar
9904 21:47:50 Iexplore FindClose C:\WORK\J2SDK1_4\DEMO\PLUGIN\JFC\JAVA2D\JAVA2DEMO.JAR SUCCESS
9905 21:47:50 Iexplore Open C:\WORK\J2SDK1_4\DEMO\PLUGIN\JFC\JAVA2D\JAVA2DEMO.JAR SUCCESS OPENEXISTING READONLY DENYNONE
9906 21:47:50 Iexplore Seek C:\WORK\J2SDK1_4\DEMO\PLUGIN\JFC\JAVA2D\JAVA2DEMO.JAR SUCCESS End Offset: 0
9907 21:47:50 Iexplore Seek C:\WORK\J2SDK1_4\DEMO\PLUGIN\JFC\JAVA2D\JAVA2DEMO.JAR SUCCESS End Offset: 0
9908 21:47:50 Iexplore Seek C:\WORK\J2SDK1_4\DEMO\PLUGIN\JFC\JAVA2D\JAVA2DEMO.JAR SUCCESS Beginning Offset: 397720
9909 21:47:50 Iexplore Read C:\WORK\J2SDK1_4\DEMO\PLUGIN\JFC\JAVA2D\JAVA2DEMO.JAR SUCCESS Offset: 397720 Length: 22
9910 21:47:50 Iexplore Seek C:\WORK\J2SDK1_4\DEMO\PLUGIN\JFC\JAVA2D\JAVA2DEMO.JAR SUCCESS Beginning Offset: 397742
9911 21:47:50 Iexplore Seek C:\WORK\J2SDK1_4\DEMO\PLUGIN\JFC\JAVA2D\JAVA2DEMO.JAR SUCCESS Beginning Offset: 383956
...
на фразы "JAVA2DEMO.CLASS" и ".CLASS" - таковых не нашлось, хотя
APPLET CODE = java2d.Java2DemoApplet.class
Значит необходимые файлы апплета по ходу процесса постоянно вынимаются
из архива JAVA2DEMO.JAR! Кто-бы мог подумать!

iLavr
-
- Admin
- Posts: 24008
- Joined: 08 Jan 2003 23:22
- Location: Silicon Valley
-
- Supreme God
- Posts: 16680
- Joined: 21 Oct 2009 08:08
- Location: Россия
Не думаю - обращения постоянно следуют и число их велико...Shaos wrote:Ну может они не постоянно вынимаются, а вынимаются ОДИН РАЗ
чтобы быть закешированными в памяти?...
Файл протокола в zip-архиве аплоудером не скушался...в rar-тоже...
А чего гадать? Промониторь память и истину - обретём...

Мне представляется, что "в топике про смерть жабы" вести эту дискуссиюShaos wrote:P.S. Кстати эту дискуссию скорее надо было вести в топике про смерть жабы
о её жизненных процессах было бы по меньшей мере оффтопом...

Да ты и сам там постоянно подчеркиваешь эту мысль...
Так что - оставим "топик про смерть жабы" для соболезнований и некрологов...
iLavr
-
- Admin
- Posts: 24008
- Joined: 08 Jan 2003 23:22
- Location: Silicon Valley
-
- Supreme God
- Posts: 16680
- Joined: 21 Oct 2009 08:08
- Location: Россия
А в исходнике лажи не наблюдается?
У меня ощущение, что с applet.getCodeBase проблема... не указана она нигде
напрямую апплету...
PS. Да.. что-то тут не продумали...
До URL url=new URL(applet.getCodeBase()+"languages/en.txt");
дело ни разу не доходит просто...
После попытки prop.load(new FileInputStream("languages/en.txt"));
программа вываливается нафиг с предупреждением...
Code: Select all
/** Creates a new instance of I18N */
public I18N(JApplet applet) {
if (prop!=null) return;
String lang="en";
try {
Properties userProperties = new Properties();
if (applet!=null) {
URL url=new URL(applet.getCodeBase()+"logicsim.cfg");
userProperties.load(url.openStream());
} else {
userProperties.load(new FileInputStream("logicsim.cfg"));
}
if (userProperties.containsKey("language"))
lang=userProperties.getProperty("language");
} catch (Exception ex) {
ex.printStackTrace();
}
prop=new Properties();
try {
// Versuchen Sprache aus Einstellungen zu laden
if (applet!=null) {
URL url=new URL(applet.getCodeBase()+"languages/"+lang+".txt");
prop.load(url.openStream());
} else {
prop.load(new FileInputStream("languages/"+lang+".txt"));
}
} catch (Exception ex) {
ex.printStackTrace();
try {
// Default: Englische Sprachdatei laden
if (applet!=null) {
URL url=new URL(applet.getCodeBase()+"languages/en.txt");
prop.load(url.openStream());
} else {
prop.load(new FileInputStream("languages/en.txt"));
}
} catch (Exception ex2) {
JOptionPane.showMessageDialog(null, "Language file languages/en.txt not found.\nPlease run the program from its directory.");
System.exit(5);
}
}
}
напрямую апплету...
PS. Да.. что-то тут не продумали...

дело ни разу не доходит просто...
После попытки prop.load(new FileInputStream("languages/en.txt"));
программа вываливается нафиг с предупреждением...

iLavr
-
- Admin
- Posts: 24008
- Joined: 08 Jan 2003 23:22
- Location: Silicon Valley
-
- Supreme God
- Posts: 16680
- Joined: 21 Oct 2009 08:08
- Location: Россия
Ну это так... только до него дело не доходит ни разу:Shaos wrote:applet.getCodeBase() - это вроде бы тот каталог откуда апплет запустился
Code: Select all
if (applet!=null) {
URL url=new URL(applet.getCodeBase()+"languages/"+lang+".txt");
prop.load(url.openStream());
} else {
prop.load(new FileInputStream("languages/en.txt"));
оно, не срабатывает, т.к. languages/en.txt не в папке апплета - и всё выходит в аут...
Как-то так получается...
Я поставил там в нужных местах public String givenUrl = applet.getCodeBase()+"languages/",
а по выпадению - вывожу его на печать... givenUrl = null

iLavr