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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Не работает апплет для использования Com порта 
V
    Опции темы
vikodin
Дата 4.1.2010, 00:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



По сабжу: необходим апплет для работы с COM портом. После нескольких дней скитаний по бескрайним просторам удалось накрапать следующее:

Код

import java.applet.Applet;
import java.util.Enumeration;
import java.awt.*;
import gnu.io.*;
import java.io.*;
import java.net.URL;

public class Comm extends Applet {
  static {
    try {
       /* Get DLL from JAR file */
      URL res = Comm.class.getResource("resources/rxtxSerial.dll");
      InputStream is = res.openStream();

      /* Define the destination file */
      File dll = File.createTempFile("rxtxSerial",".dll");

      /* Open the destination file */
      FileOutputStream fos = new FileOutputStream(dll);

      /* Copy the DLL fro the JAR to the filesystem */
      byte[] array = new byte[1024];
      for(int i=is.read(array);
        i!=-1;
        i=is.read(array)
      ) {
        fos.write(array,0,i);
      }

      /* Close all streams */
      fos.close();
      is.close();

      /* Load the DLL from the filesystem */
      System.load(dll.getAbsolutePath());
      }
    catch(Throwable e)
    {
      e.printStackTrace();
    }
  }
    /**
     * Initialization method that will be called after the applet is loaded
     * into the browser.
     */
    public void init() {
        // TODO start asynchronous download of heavy resources
        Panel p = new Panel();
        p.add(new Label("Инициализация"));
       add("Center",p);
       p = new Panel();
       Enumeration CommID = CommPortIdentifier.getPortIdentifiers();
        while(CommID.hasMoreElements()){
            CommPortIdentifier CurrComm = (CommPortIdentifier)CommID.nextElement();
            if(CurrComm.getPortType() == CommPortIdentifier.PORT_SERIAL){
                p.add(new Label("Найден COM порт - "+CurrComm.getName()));
            }
        }
     add("Center",p);    
    }

    // TODO overwrite start(), stop() and destroy() methods
}


Comments:
подгружаестя библиотека rxtxSerial.dll которая лежит в каталоге resources
ее исходники расположены в структуре gnu\io
эти два каталога (gnu, resources) лежат рядом с Comm.class
(взято здесь и немного переделано)
Компиляция в NetBeans 6.8 проходит успешно, создаются все необходимые файлы. 
при просмотре апплета в appletviewer отображаються все COM потры, которые есть на компе,
но при открытии в Mozilla отображается только строка "Инициализация"
код хтмл:
Код

<HTML>
<HEAD>
   <TITLE>Applet HTML Page</TITLE>
</HEAD>
<BODY>

<H3><HR WIDTH="100%">Applet HTML Page<HR WIDTH="100%"></H3>

<P>
<APPLET code="Comm.class" width=350 height=200></APPLET>
</P>

<HR WIDTH="100%"><FONT SIZE=-1><I>Generated by NetBeans IDE</I></FONT>
</BODY>
</HTML>

Почему в браузере не отображется список портов.
Сообщений об ошибке никаких нет.
заранее спасибо.
ps jdk1.6.0_17

Это сообщение отредактировал(а) vikodin - 4.1.2010, 11:40
PM MAIL   Вверх
vikodin
Дата 4.1.2010, 11:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



очен ытнтересно. Заработало (т.е. отобразился список COM портов) после того, как задал jar-у:
Код

<html>
    <head>
    </head>
    <body>
        <h3>Test page for Comm.class</h3>
        <applet CODE="Comm.class" ARCHIVE="Com.jar" width="800" height="300">
         </applet>
     </body>
</html>

Правда, теперь и опера и Ё-мое ругается, что неподписанное приложение.
А почему же без жары не работал правыльно?
PM MAIL   Вверх
LSD
Дата 4.1.2010, 12:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

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



Цитата(vikodin @  4.1.2010,  11:39 Найти цитируемый пост)
А почему же без жары не работал правыльно? 

А почему должен? Как по твоему браузер должен догадаться откуда грузить классы?


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
vikodin
Дата 4.1.2010, 20:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(LSD @ 4.1.2010,  12:35)
А почему должен? Как по твоему браузер должен догадаться откуда грузить классы?

но ведь в браузере отображалась строка "Инициализация" (строкв 49 из Comm.class)
в хтмл указан начальный класс, который знает где (искать-?) остальные . файл класса лежит в одной папке с хтмл и он грузится.
PM MAIL   Вверх
LSD
Дата 4.1.2010, 21:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

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



Цитата(vikodin @  4.1.2010,  20:29 Найти цитируемый пост)
в хтмл указан начальный класс, который знает где (искать-?) остальные 

Еще более интересный вывод smile А класс то откуда знает где лежат остальные классы? Где у тебя в коде класса упоминание о Com.jar?


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
vikodin
Дата 5.1.2010, 22:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Спасибо.
Но вопросы остались:
1. в нетбинсе я указываю - выполнить файл - Com.class и appletviewer-ре отображается список портов, выходит нетбинс указывает, где хранятся классы.
2. 
Цитата

 А класс то откуда знает где лежат остальные классы? Где у тебя в коде класса упоминание о Com.jar? 

тогда должна вылететь ошибка "не найден файл - rxtxSerial.dll" и неизвестное выражение "import gnu.io.*" или я что-то не так понял
PM MAIL   Вверх
LSD
Дата 6.1.2010, 14:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

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



Цитата(vikodin @  5.1.2010,  22:00 Найти цитируемый пост)
1. в нетбинсе я указываю - выполнить файл - Com.class и appletviewer-ре отображается список портов, выходит нетбинс указывает, где хранятся классы.

Смотри параметры запуска appletviewer-ра, там должен быть указан сгенерированный HTML. А вообще appletviewer это далеко не браузер, у него например вообще нет security manager-а. А вот тот же браузер не даст твоему апплету работать с файлами и подключать нативные библиотеки, пока не подпишешь его.



Цитата(vikodin @  5.1.2010,  22:00 Найти цитируемый пост)
тогда должна вылететь ошибка "не найден файл - rxtxSerial.dll" и неизвестное выражение "import gnu.io.*" или я что-то не так понял 

1. import существуют только во время компиляции. Во время выполнения все вызываются по своим полным именам.
2. В это коде должен быть NullPointerException на 13 строке. Ну и плюс надо смотреть как себя поведет CommPortIdentifier когда dll не загружена.



Рекомендую: Deploying Java Applets пункты 3, 4, 5.


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
vikodin
Дата 6.1.2010, 18:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



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

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

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


 




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


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

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