Мои лекции по Java (1998-2003)

Использование и разработка софта (преимущественно на ПЦ)

Moderator: Shaos

User avatar
Lavr
Supreme God
Posts: 16680
Joined: 21 Oct 2009 08:08
Location: Россия

Post by Lavr »

Shaos, а есть какой-либо приём ЗАМЕДЛИТЬ выполнение программы на Java?
А то вроде как наблюдаю некий непринципиальный глючок при выводе на канвас,
но никак не пойму - есть ли он реально, и в чем заключается...
Хочется рассмотреть вывод приторможенно.
User avatar
Shaos
Admin
Posts: 24008
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Post by Shaos »

Lavr wrote:Shaos, а есть какой-либо приём ЗАМЕДЛИТЬ выполнение программы на Java?
А то вроде как наблюдаю некий непринципиальный глючок при выводе на канвас,
но никак не пойму - есть ли он реально, и в чем заключается...
Хочется рассмотреть вывод приторможенно.
sleep
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Lavr
Supreme God
Posts: 16680
Joined: 21 Oct 2009 08:08
Location: Россия

Странный глюк Жабы...

Post by Lavr »

Отлаживал тут я программу на Жабе и странный глюк у неё: папка с языковой
поддержкой прямо на виду - в текущей директории, а Жаба-апплет её в упор
не находит... :(

Ну пришлось посмотреть, где он ищет - и тут я впал в ступпор:

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\¦L+++Lг TT+T\ которая к тому-же успешно открывается! :o
Что это может быть за фигня? :o

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

Какие могут быть предположения? :-?
iLavr
User avatar
Lavr
Supreme God
Posts: 16680
Joined: 21 Oct 2009 08:08
Location: Россия

Post by Lavr »

Самое странное, что после поиска папки с языковой поддержкой
LANGUAGES\EN.TXT по этому странному пути: C:\WINDOWS\¦L+++Lг TT+T\
апплет не ищет её больше нигде, что как-то совершенно нехарактерно! :o
По крайней мере должен поискать в своей текущей директории! :-?

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

Image

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

Вдвойне странно, что если апплет запустить в лобовую:

Code: Select all

@echo off
@java logicsim.App
Все папки и пути находятся правильно и без ошибок... :evil:


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
b2m
Devil
Posts: 907
Joined: 26 May 2003 06:57

Post by b2m »

Lavr wrote:А вот куда архив .JAR разворачивается - не представляю...
А никуда. Так из zip-архива по одному файлу и читает.
Страничка эмулятора наших компьютеров
http://bashkiria-2m.narod.ru/
User avatar
Lavr
Supreme God
Posts: 16680
Joined: 21 Oct 2009 08:08
Location: Россия

Post by Lavr »

b2m wrote:
Lavr wrote:А вот куда архив .JAR разворачивается - не представляю...
А никуда. Так из zip-архива по одному файлу и читает.
Серьёзно? :o Прямо не верится! :roll: А где бы это уточнить поофициальнее?
Не то, чтобы я не верю, но дико как-то постоянно лазить за файлами в архив! :o

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

Image

Она их переименовывает на свой лад и где-то помечает...

Наверное внутри... в одном из файлов нашел текст: Clock.jar
iLavr
User avatar
Shaos
Admin
Posts: 24008
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Post by Shaos »

ну твоё озу заведомо больше размера джара - что джаве мешает его в память раздекодить? ;)
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Lavr
Supreme God
Posts: 16680
Joined: 21 Oct 2009 08:08
Location: Россия

Post by Lavr »

Shaos wrote:ну твоё озу заведомо больше размера джара - что джаве мешает его в память раздекодить? ;)
Это уже второе мнение...

1. Жаба постоянно лазиет в zip-файл.
2. Жаба удерживает распакованный архив в ОЗУ с сохранением струкуры папок.

Истина, наверное, где-то рядом... Как бы её поточнее узнать?

Вопрос-то у меня не праздный. Я ж смотрю - что подглюкивает в путях
файлов Жабёнок порой...


PS. Я не ленивый, я погуглил вопрос... но безрезультатно пока... :(
iLavr
User avatar
Lavr
Supreme God
Posts: 16680
Joined: 21 Oct 2009 08:08
Location: Россия

Post by Lavr »

Lavr wrote:
b2m wrote:
Lavr wrote:А вот куда архив .JAR разворачивается - не представляю...
А никуда. Так из zip-архива по одному файлу и читает.
Не то, чтобы я не верю, но дико как-то постоянно лазить за файлами в архив! :o
Тем не менее, похоже, что так и есть, и b2m совершенно прав!

Для проверки запустил сложный по структуре апплет из примеров Джабы:

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! Кто-бы мог подумать! :o
iLavr
User avatar
Shaos
Admin
Posts: 24008
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Post by Shaos »

Ну может они не постоянно вынимаются, а вынимаются ОДИН РАЗ чтобы быть закешированными в памяти?...

P.S. Кстати эту дискуссию скорее надо было вести в топике про смерть жабы ;)
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Lavr
Supreme God
Posts: 16680
Joined: 21 Oct 2009 08:08
Location: Россия

Post by Lavr »

Shaos wrote:Ну может они не постоянно вынимаются, а вынимаются ОДИН РАЗ
чтобы быть закешированными в памяти?...
Не думаю - обращения постоянно следуют и число их велико...
Файл протокола в zip-архиве аплоудером не скушался...в rar-тоже...
А чего гадать? Промониторь память и истину - обретём... :wink:
Shaos wrote:P.S. Кстати эту дискуссию скорее надо было вести в топике про смерть жабы ;)
Мне представляется, что "в топике про смерть жабы" вести эту дискуссию
о её жизненных процессах было бы по меньшей мере оффтопом... :-?
Да ты и сам там постоянно подчеркиваешь эту мысль...

Так что - оставим "топик про смерть жабы" для соболезнований и некрологов...
iLavr
User avatar
Shaos
Admin
Posts: 24008
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Post by Shaos »

оставим
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Lavr
Supreme God
Posts: 16680
Joined: 21 Oct 2009 08:08
Location: Россия

Post by Lavr »

А в исходнике лажи не наблюдается?

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);
            }

        }
    }
У меня ощущение, что с applet.getCodeBase проблема... не указана она нигде
напрямую апплету...


PS. Да.. что-то тут не продумали... :( До URL url=new URL(applet.getCodeBase()+"languages/en.txt");
дело ни разу не доходит просто...
После попытки prop.load(new FileInputStream("languages/en.txt"));
программа вываливается нафиг с предупреждением... :(
iLavr
User avatar
Shaos
Admin
Posts: 24008
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Post by Shaos »

applet.getCodeBase() - это вроде бы тот каталог откуда апплет запустился
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Lavr
Supreme God
Posts: 16680
Joined: 21 Oct 2009 08:08
Location: Россия

Post by Lavr »

Shaos wrote:applet.getCodeBase() - это вроде бы тот каталог откуда апплет запустился
Ну это так... только до него дело не доходит ни разу:

Code: Select all

           if (applet!=null) { 

                URL url=new URL(applet.getCodeBase()+"languages/"+lang+".txt"); 
                prop.load(url.openStream()); 
            } else {
Похоже applet=null в этот момент, откуда пытаются:
prop.load(new FileInputStream("languages/en.txt"));
оно, не срабатывает, т.к. languages/en.txt не в папке апплета - и всё выходит в аут...
Как-то так получается...

Я поставил там в нужных местах public String givenUrl = applet.getCodeBase()+"languages/",
а по выпадению - вывожу его на печать... givenUrl = null :(
iLavr