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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> javax.comm.*, возможно работает с ошибкой 
V
    Опции темы
barin_Student
Дата 4.6.2008, 12:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 488
Регистрация: 10.8.2007
Где: Казахстан , Алмат ы

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



Есть вот такие строки в моей програмке:
Код

BufferedReader BR = new BufferedReader(new InputStreamReader (port.getInputStream()));
if(BR.ready()==false)
{
    int timer = 1;
    while(BR.ready()==false)
    {
       if(timer ==10)
       {
          history.Write("Waiting, stream not ready","GSMTerminal");
       }
       this.wait(100);
       if((BR.ready())&(timer>=10))
       {
           timer = 1;
           history.Write("Stream ready=true, GSMTerminal works.","GSMTerminal");
       }
       if(timer==30)
       {
          history.Write("Stream closed, try to replay command ","GSMTerminal");
      timeToQuit = true;
          port.close();
          this.Inicialization();
          BR.close();
          break;
       }
       timer++;
    }
}
if(timeToQuit!=true)
{
   str = BR.readLine();
   history.Write(str,"GSMTerminal");
}

вот метод Inicialization:
Код

  public void Inicialization()
    {
         errorWriter = new ErrorWriter();
          history = new HistoryWriter();
        String defaultPort=properties.Load("defaultPort");
        portList = CommPortIdentifier.getPortIdentifiers();
         while (portList.hasMoreElements())
        {
        portId = (CommPortIdentifier) portList.nextElement();
        if (portId.getPortType() == CommPortIdentifier.PORT_SERIAL)
                    {
        if (portId.getName().equals(defaultPort))
                                {
            history.Write("Found port "+defaultPort+" , try to open...","GSMTerminal");
                                    try 
                                    {
                                            port = (SerialPort) portId.open("Server",2000);
                                            portOpen=true;
                                           history.Write("Port "+defaultPort+" open!","GSMTerminal");
                                            this.setInputStream(port.getInputStream());
                                     } 
                                     catch (PortInUseException e) 
                                     {
                                               history.Write("Port "+defaultPort+" is already in use, can not use this port ","GSMTerminal");
                                             errorWriter.WriteError("Error in Inicialization ComPort  "+e);
                                             portOpen = false;
                                    }
                                    catch(IOException IOE)
                                    {
                                         errorWriter.WriteError("Error in GSMModem in Inicilize  "+IOE);
                                     }
        }
        }
            
    }
        
        
            }


А вот кусок лога:
Код

03.06.2008 01:23:32  ---------------------------------------
03.06.2008 01:23:32  at+cmgl=ALL
03.06.2008 01:23:33  Waiting, stream not ready
03.06.2008 01:23:35  Stream closed, try to replay command 
03.06.2008 01:23:35  Found port /dev/ttyS0 , try to open...
03.06.2008 01:23:35  Port /dev/ttyS0 open!
03.06.2008 01:25:30  ---------------------------------------
03.06.2008 01:25:30  at+cmgl=ALL
03.06.2008 01:25:31  Waiting, stream not ready
03.06.2008 01:25:33  Stream closed, try to replay command 
03.06.2008 01:25:33  Found port /dev/ttyS0 , try to open...
03.06.2008 01:25:33  Port /dev/ttyS0 open!
03.06.2008 01:27:28  ---------------------------------------
03.06.2008 01:27:28  at+cmgl=ALL
03.06.2008 01:27:29  Waiting, stream not ready
03.06.2008 01:27:31  Stream closed, try to replay command 
03.06.2008 01:27:31  Found port /dev/ttyS0 , try to open...
03.06.2008 01:27:31  Port /dev/ttyS0 open!
03.06.2008 01:29:26  ---------------------------------------
03.06.2008 01:29:26  at+cmgl=ALL
03.06.2008 01:29:27  Waiting, stream not ready
03.06.2008 01:29:29  Stream closed, try to replay command 
03.06.2008 01:29:29  Found port /dev/ttyS0 , try to open...
03.06.2008 01:29:29  Port /dev/ttyS0 open!
03.06.2008 01:31:24  ---------------------------------------
03.06.2008 01:31:24  at+cmgl=ALL

Могу сразу сказать к ком порту ничаго отвечающего не было подключенно , тобишь я постоянно перестартовывал ком порт.. а в какой то момент он сказал , что готов передать байты.. и повесилась программка.. в чем дело,? smile  Може кому еще надо что выложить.. просто не умею я толком вопросы задавать. smile 


--------------------
Нехорошо блин!!!
PM MAIL   Вверх
barin_Student
Дата 5.6.2008, 07:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 488
Регистрация: 10.8.2007
Где: Казахстан , Алмат ы

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



Точнее , если не знаю где я непрвильно отписал, лучше подсказать по этому вопросу:
Код

BufferedReader BR = new BufferedReader(new InputStreamReader (port.getInputStream()));
if(BR.ready()==false)
{
    
       this.wait(100);
       if(timer==30)
       {
          history.Write("Stream closed, try to replay command ","GSMTerminal");
          timeToQuit = true;
          port.close();
          this.Inicialization();
          BR.close();
          break;
       }
       timer++;
    }
}
if(timeToQuit!=true)
{
   str = BR.readLine();// вот именно здесь выставить таймер чтения скажем читать не белее секунды , потом пускай в эксаптион выскакивает...
   history.Write(str,"GSMTerminal");



--------------------
Нехорошо блин!!!
PM MAIL   Вверх
barin_Student
Дата 5.6.2008, 11:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 488
Регистрация: 10.8.2007
Где: Казахстан , Алмат ы

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



Неужели никто не сталкивался с такой проблемой smile :
Код

BufferedReader BR = new BufferedReader(new InputStreamReader (port.getInputStream()));
if(BR.ready()==true)
{
     String str = BR.readLine();// иногда он ничал не дает.. висит здесь.. и в NUllPointerException не выкидывает...
}

 smile 


--------------------
Нехорошо блин!!!
PM MAIL   Вверх
LSD
Дата 5.6.2008, 12:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


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

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



А в чем проблема то?

То что тут:
Код

BufferedReader BR = new BufferedReader(new InputStreamReader (port.getInputStream()));
if(BR.ready()==true)
{
     String str = BR.readLine();// иногда он ничал не дает.. висит здесь.. и в NUllPointerException не выкидывает...
}

возможно "зависание" программы, это нормально. Т.к. BR.ready() возвращает true если есть хоть какие нибудь данные. А BR.readLine() будет читать из входного потока до тех пор пока, или не будет получен символ конца строки, или поток не будет закрыт. NullPointerException там вообще неоткуда взяться.


--------------------
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   Вверх
barin_Student
Дата 5.6.2008, 12:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 488
Регистрация: 10.8.2007
Где: Казахстан , Алмат ы

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



Да но ни строки , ничаго нет.. если судить по логам.. Как он может быть true? если ничаго к ком порту не подключенно, и ничаго не обращается к нему? smile
Код

03.06.2008 01:27:28  at+cmgl=ALL
03.06.2008 01:27:29  Waiting, stream not ready
03.06.2008 01:27:31  Stream closed, try to replay command 
03.06.2008 01:27:31  Found port /dev/ttyS0 , try to open...
03.06.2008 01:27:31  Port /dev/ttyS0 open!
03.06.2008 01:29:26  ---------------------------------------
03.06.2008 01:29:26  at+cmgl=ALL
03.06.2008 01:29:27  Waiting, stream not ready
03.06.2008 01:29:29  Stream closed, try to replay command 
03.06.2008 01:29:29  Found port /dev/ttyS0 , try to open...
03.06.2008 01:29:29  Port /dev/ttyS0 open!
03.06.2008 01:31:24  ---------------------------------------
03.06.2008 01:31:24  at+cmgl=ALL
 
Все уже двое суток ждет строки... smile , вот на чем лог закончился(программа работает) , 

Это сообщение отредактировал(а) barin_Student - 5.6.2008, 12:55


--------------------
Нехорошо блин!!!
PM MAIL   Вверх
LSD
Дата 5.6.2008, 12:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


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

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



Цитата(barin_Student @  5.6.2008,  13:53 Найти цитируемый пост)
Да но ни строки , ничаго нет.. если судить по логам..

Строка, это то что завершается символом конца строки. Пока его не послать в порт, то ты ничего и не получишь. Читай посимвольно, тогда возможно и узнаешь, что же записано в порт.


Цитата(barin_Student @  5.6.2008,  13:53 Найти цитируемый пост)
Как он может быть true? если ничаго к ком порту не подключенно, и ничаго не обращается к нему?

А нафига тогда вообще из него читать, если там ничего нет?


--------------------
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   Вверх
barin_Student
Дата 5.6.2008, 13:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 488
Регистрация: 10.8.2007
Где: Казахстан , Алмат ы

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



Вот по моему условию, как можно определить , есть ли там чаго...
Просто напросто , проверяю , ready() ? , да - читаю, нет , закрываю входящий поток , закрываю порт, открываю заново.. и вот на таком условии(когда GSMModem не подключен может сутки проработать - двое(по разному) , но падает потом , так как я вам показал..
Код

BufferedReader BR = new BufferedReader(new InputStreamReader (port.getInputStream()));
if(BR.ready()==true)
{
     String str = BR.readLine();// именно здесь повисает...
}


как избежать , какой интсрумент есть?
Код

если там ничего нет?
 
Как определить? Ведь BR.ready()==true!(будем считать что рас в сутки), а восновном если нет входящих строк , то он равен false().

Это сообщение отредактировал(а) barin_Student - 5.6.2008, 13:04


--------------------
Нехорошо блин!!!
PM MAIL   Вверх
LSD
Дата 5.6.2008, 14:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


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

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



Цитата(barin_Student @  5.6.2008,  14:02 Найти цитируемый пост)
как избежать , какой интсрумент есть?

Ты читать умеешь? smile 
Цитата(LSD @  5.6.2008,  13:56 Найти цитируемый пост)
Читай посимвольно



--------------------
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   Вверх
barin_Student
Дата 6.6.2008, 05:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 488
Регистрация: 10.8.2007
Где: Казахстан , Алмат ы

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



Умею я читать, вопревых по символьно было неудобно.. но решил я эту проблему.. стал читать посимвольно.. и суть осталась та же самая..Условие это "счас дам байты=да дам",рас в сутки выскакивало..а сам ничаго не давал...
Суть то в том , что это условие в моем случае до новой эры должно было быть ==false. smile
Вот  

Это сообщение отредактировал(а) barin_Student - 6.6.2008, 06:12


--------------------
Нехорошо блин!!!
PM MAIL   Вверх
barin_Student
Дата 6.6.2008, 06:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 488
Регистрация: 10.8.2007
Где: Казахстан , Алмат ы

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



А как посимвольно привести в строку , и где конец ?
Может так:
Код

int strInt;
while((strInt=BR.read())!=-1)//здесь тоже ошибка .. пока пишу , меняю.. вопщем ищу , как здесь условие поставить..
{
    //здесь как привести Интовое в строку , с Enter и таму подобное
}

Сорри если это вопрос №2 и я нарушил правила.. могу создать новую тему. smile 

Это сообщение отредактировал(а) barin_Student - 6.6.2008, 06:52


--------------------
Нехорошо блин!!!
PM MAIL   Вверх
barin_Student
Дата 6.6.2008, 07:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 488
Регистрация: 10.8.2007
Где: Казахстан , Алмат ы

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



Код

char[] chr = new char[255];
BR.read(chr);
String str = new String().copyValueOf(chr);

счас проверю , вот такой код.


--------------------
Нехорошо блин!!!
PM MAIL   Вверх
ivg
Дата 6.6.2008, 10:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Autonomous R&D
**


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

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



PM MAIL   Вверх
barin_Student
Дата 6.6.2008, 10:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 488
Регистрация: 10.8.2007
Где: Казахстан , Алмат ы

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



Прочитал я док, спасибо за ссылку smile .. есть только разница .. разобраться с схемой работы.
Счас переделал вот как:
Код

String str = "";
int strInt = ;
port.enableReceiveTimeOut(3000);
while((strInt=BR.read())!0x0a)
{
     char s =(char)strInt;
     str = str+new String().valueOf(s);
}

Вот так ? Кто этим пользовался(enableReceiveTimeout())?Просто я не могу проверить , работает , или нет(имеется ввиду быстро проверить. smile 


--------------------
Нехорошо блин!!!
PM MAIL   Вверх
ivg
Дата 6.6.2008, 10:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Autonomous R&D
**


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

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



Цитата(barin_Student @  6.6.2008,  13:33 Найти цитируемый пост)
Счас переделал вот как:

И что компилируется? smile
Обратите внимание на 
Цитата

Enables receive timeout, if this feature is supported by the driver. When the receive timeout condition becomes true, a read  from the input stream for this port will return immediately.
enableReceiveTimeout is an advisory method which the driver may not implement. By default, receive timeout is not enabled. 
An application can determine whether the driver supports this feature by first calling the enableReceiveTimeout method and then calling the isReceiveTimeout method. If isReceiveTimeout still returns false, then receive timeout is not supported by the driver.

PS: Доки для кого пишут?

Добавлено через 4 минуты и 17 секунд
Цитата(barin_Student @  6.6.2008,  13:33 Найти цитируемый пост)
Просто я не могу проверить , работает , или нет

Аналогично, линукса под рукой нет, да и javax.comm.* библиотеки тоже.
PM MAIL   Вверх
barin_Student
Дата 6.6.2008, 10:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 488
Регистрация: 10.8.2007
Где: Казахстан , Алмат ы

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



Компилится smile ...
 счас запущю...

Добавлено через 1 минуту и 15 секунд
И идет.. но узнать что это хоть что то полезное делает я не могу.. smile 


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

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

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


 




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


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

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