Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Диплом и сопутствующие вопросы / 25 сообщений из 32, страница 1 из 2
03.05.2005, 11:22
    #33045672
adf
adf
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Диплом и сопутствующие вопросы
Здравстуйте!
По мере доработки диплома у меня возникли кое-какие проблемы.

Введение

У меня есть дерево на сервере, в качестве узлов - объекты собственного класса, ему так же назначен собственный рендерер.
Это дерево должно отобразиться у клиента.
После долгих мук в попытке передать само дерево JTree (приходит только схема, то он начинает ругаться и пр.), было решено передавать его модель. На клиенте у меня хранится класс узлов той же компиляции (или как это называется), что и на сервере (иначе ругается). Дереву, созданному по пришедшей модели, назначается собственный рендерер.
Ну это так, к сути не особо относится.

Теперь самое интересное:
на сервере
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
	
 protected  ObjectOutputStream pw;
...
 protected   void  send_tree(){
	 try 	{					
	        pw.writeObject(myTreeModel);						
		
	} catch (IOException e){
		log("Не могу отослать дерево!");			
	}
На клиенте

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
 new  Thread( new  Runnable(){
	 public   void  run(){
		Object line =  new  Object();
		 try 	{					
			 while  ((line = is.readObject())!= null ){
			...
                          //пришло дерево	
			 else   if (line  instanceof  DefaultTreeModel){
		        	//переприсвоение дерева и модели

                                 model =  null ;								
				model =(DefaultTreeModel)(line);						
				tree =  null ;						
				tree =  new  JTree(model);							
				tree.setCellRenderer( new  MyRenderer());
                                       ..															
		}				
					
Далее вывожу только что содзанное дерево.

при подключении клиента ему сразу отсылается модель дерева. В первый раз она "свежая".
Далее подключается еще один клиент, соответствующий ему узел в дереве обновляется ( ну типа "активный" становится) обоим высылается новая модель, к новому юзеру она приходит опять -таки "свежая", а вот первому клиету хоть и приходит модель (то есть вызывается)
Код: plaintext
 else   if (line  instanceof  DefaultTreeModel)
, но она старая, то есть та, которая пришла ему в самом начале. Такая же ситуация возникает, если редактировать дерево (надобавлять, наудалять, напереименовывать) и после отослать модель...

Я даже не знаю, с чем это может быть связано. Есть этому разумное объяснение???
...
Рейтинг: 0 / 0
03.05.2005, 14:36
    #33046247
adf
adf
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Диплом и сопутствующие вопросы
Ладно, вот еще вопросики попроще
1. Кусок кода:
Код: plaintext
1.
2.
3.
4.
5.
6.
 final   protected   char  UGET_JOIN  = '4';
...
 int  num_room =  0 ;
...
String s = UGET_JOIN+num_room +...;
//отсылаю строку "40"
Приходит она туда что-то вроде "59"

Даже если так
String s =""+UGET_JOIN+num_room +...;
Получается что чар и инт суммируется и не ругается совершенно

Почему??
2.
И еще что лучше (не с точки плохого стиля программирования):
делать кучу проверок или ловить исключения?
...
Рейтинг: 0 / 0
03.05.2005, 14:39
    #33046255
А.Грасоff™ JE
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Диплом и сопутствующие вопросы
1. char приводится к int
...
Рейтинг: 0 / 0
03.05.2005, 14:44
    #33046268
NotGonnaGetUs
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Диплом и сопутствующие вопросы
adf
Даже если так
String s =""+UGET_JOIN+num_room +...;
Получается что чар и инт суммируется и не ругается совершенно

Почему??

Враньё.



2.
И еще что лучше (не с точки плохого стиля программирования):
делать кучу проверок или ловить исключения?

Можно грамотно сделать и то и другое, зависит от задачи и соглашений между программистами.
А можно проверять не понятно что и кидать чем попало - и будет плохо :)
...
Рейтинг: 0 / 0
03.05.2005, 14:59
    #33046297
А.Грасоff™ JE
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Диплом и сопутствующие вопросы
NotGonnaGetUsМожно грамотно сделать и то и другое, зависит от задачи и соглашений между программистами.
А можно проверять не понятно что и кидать чем попало - и будет плохо :)

плюс к этому - некоторые действия требуют перехвата исключения.
...
Рейтинг: 0 / 0
03.05.2005, 14:59
    #33046299
А.Грасоff™ JE
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Диплом и сопутствующие вопросы
NotGonnaGetUs adf
Даже если так
String s =""+UGET_JOIN+num_room +...;
Получается что чар и инт суммируется и не ругается совершенно

Почему??

Враньё.

в смысле?
...
Рейтинг: 0 / 0
03.05.2005, 15:03
    #33046304
adf
adf
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Диплом и сопутствующие вопросы
NotGonnaGetUs adf
Даже если так
String s =""+UGET_JOIN+num_room +...;
Получается что чар и инт суммируется и не ругается совершенно

Почему??

Враньё.
Почему враньё? Работать начало когда туСтринг сделала, это меня очень удивило, я глазам не поверила, когда эта конструкция не сработала
(Я конечно не могу быть на 100% уверена, но по-моему так все и было)
NotGonnaGetUs
2.
И еще что лучше (не с точки плохого стиля программирования):
делать кучу проверок или ловить исключения?

Можно грамотно сделать и то и другое, зависит от задачи и соглашений между программистами.
А можно проверять не понятно что и кидать чем попало - и будет плохо :)
То есть это нормально, ловить?
Там никаких потерь в производительности нет?
Эт' хорошо. Раньше я в толк взять не могла, зачем нужна такая конструкция, особенно когда на С++ че-то делала, сейчас без нее жить не могу.
Это как старая история про Goto, во всех книжках рекомендуют не использовать, а некоторые все-равно используют (ну я например).
Хорошо что у ехсептиона нет такой дурной славы (наверно)
...
Рейтинг: 0 / 0
03.05.2005, 15:04
    #33046310
NotGonnaGetUs
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Диплом и сопутствующие вопросы
А.Грасоff™ JE NotGonnaGetUs adf
Даже если так
String s =""+UGET_JOIN+num_room +...;
Получается что чар и инт суммируется и не ругается совершенно

Почему??

Враньё.

в смысле?

В прямом.

"" + '4' + 35 = "435".
...
Рейтинг: 0 / 0
03.05.2005, 15:09
    #33046322
А.Грасоff™ JE
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Диплом и сопутствующие вопросы
NotGonnaGetUs А.Грасоff™ JE NotGonnaGetUs adf
Даже если так
String s =""+UGET_JOIN+num_room +...;
Получается что чар и инт суммируется и не ругается совершенно

Почему??

Враньё.

в смысле?

В прямом.

"" + '4' + 35 = "435".
у нее "" в конце стоял :)
...
Рейтинг: 0 / 0
03.05.2005, 15:21
    #33046349
NotGonnaGetUs
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Диплом и сопутствующие вопросы
А.Грасоff™ JE NotGonnaGetUs А.Грасоff™ JE NotGonnaGetUs adf
Даже если так
String s =""+UGET_JOIN+num_room +...;
Получается что чар и инт суммируется и не ругается совершенно

Почему??

Враньё.

в смысле?

В прямом.

"" + '4' + 35 = "435".
у нее "" в конце стоял :)

Читай сообщение от adf " сегодня, 14:36 ";
...
Рейтинг: 0 / 0
03.05.2005, 15:35
    #33046385
adf
adf
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Диплом и сопутствующие вопросы
Ну-ну

Кто бы мне еще с главным вопросом так помог.
Или тоже скажете, что я что-то не туда написала и не с той стороны приравняла
(Это вполне вероятно)

Походу здесь никто с деревьями не работал

Че делать?
...
Рейтинг: 0 / 0
03.05.2005, 15:39
    #33046398
NotGonnaGetUs
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Диплом и сопутствующие вопросы
adfНу-ну

Кто бы мне еще с главным вопросом так помог.
Или тоже скажете, что я что-то не туда написала и не с той стороны приравняла
(Это вполне вероятно)

Походу здесь никто с деревьями не работал

Че делать?

Что такое переменная tree?

Возможно первое созданное дерево отображается на панели, а всё что приходит потом, ты не добавляешь в swingовскую иерархию объектов.

Мало инфы.
...
Рейтинг: 0 / 0
03.05.2005, 15:54
    #33046426
adf
adf
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Диплом и сопутствующие вопросы
это у меня дерево в сплит панели (это совершенно не важно)

после того как приходит модель, я создаю по нему совершенно новое дерево, и
JOptionPane.showMessageDialog'ом смотрю что пришло, даже не присваивая основной переменной - это старый вариант!
Ну потом я конечно все это в сплит засовываю:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
JTree tree; 
JScrollPane sct;
DefaultTreeModel model;
........
 else   if (line  instanceof  DefaultTreeModel){
        JTree t =  new  JTree((DefaultTreeModel)(line));
        JOptionPane.showMessageDialog( null , t);//cтарье показывает, хотя на сервере дерево изменилось и отсылается соотв-но новая модель!
        //это наверно уже не важно
	model =  null ;								
	model =(DefaultTreeModel)(line);						
	tree =  null ;						
	tree =  new  JTree(model);							
	tree.setCellRenderer( new  MyRenderer());
	sct =  new  JScrollPane(tree);				
	sp.setTopComponent(sct);



Может с потоком чего-то не то? Остальное все нормально передается :(
...
Рейтинг: 0 / 0
03.05.2005, 16:08
    #33046473
NotGonnaGetUs
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Диплом и сопутствующие вопросы
значит нужно разбираться как шлёшь и как читаешь.
...
Рейтинг: 0 / 0
03.05.2005, 16:09
    #33046475
NotGonnaGetUs
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Диплом и сопутствующие вопросы
что значит "Остальное все нормально передается :(" ?
...
Рейтинг: 0 / 0
03.05.2005, 16:17
    #33046498
adf
adf
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Диплом и сопутствующие вопросы
Поток стандартный, через сокет
Код: plaintext
ObjectInputStream (sock.getInputStream());
посылаю объектами строку, объект своего класса, и модель дерева.
Строки и объекты передаются нормально (этого следовало ожидать), а еще следовало ожидать что и модель на входе и на выходе будет одинаковой...

Буферизация тут не при чем?
( Глупо наверно, но просто я уже не знаю что и думать)
...
Рейтинг: 0 / 0
03.05.2005, 16:28
    #33046540
NotGonnaGetUs
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Диплом и сопутствующие вопросы
adfПоток стандартный, через сокет
Код: plaintext
ObjectInputStream (sock.getInputStream());
посылаю объектами строку, объект своего класса, и модель дерева.
Строки и объекты передаются нормально (этого следовало ожидать), а еще следовало ожидать что и модель на входе и на выходе будет одинаковой...

Буферизация тут не при чем?
( Глупо наверно, но просто я уже не знаю что и думать)

Добавь в модель поле с уникальным идентификатором.
Перед отправкой выводи его в консоль и принимая выводи его в консоль.
Если действительно передаётся один объект, а принимается другой - то это НЛО.
Переданный объект никуда исчезнуть не может. Прочитанный назад не будет в ставлен, если специально не постараться.
...
Рейтинг: 0 / 0
03.05.2005, 16:39
    #33046578
adf
adf
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Диплом и сопутствующие вопросы
NotGonnaGetUs

Добавь в модель поле с уникальным идентификатором.
Ээ как? Мне вместо DefaultTreeModel написать так чтоли
Код: plaintext
1.
2.
3.
сlass MyMod  implements  Serializable{
DefaultTreeModel mod;
 int  myInt;
}


NotGonnaGetUs
Перед отправкой выводи его в консоль и принимая выводи его в консоль.
Если действительно передаётся один объект, а принимается другой - то это НЛО
...
Рейтинг: 0 / 0
03.05.2005, 16:44
    #33046593
NotGonnaGetUs
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Диплом и сопутствующие вопросы
да хоть так.
быстрее обнаружится, где кривой код.
...
Рейтинг: 0 / 0
03.05.2005, 16:52
    #33046624
adf
adf
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Диплом и сопутствующие вопросы
Еще щас пойду научного руководителя озадачу...
Попробую и как ты говоришь отослать.
Об успехах (или неудачах) еще напишу

С надеждой что это мой код кривой
и я просто где-то забыла "" прибавить с нужного места
ADF
...
Рейтинг: 0 / 0
06.05.2005, 09:50
    #33051983
adf
adf
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Диплом и сопутствующие вопросы
Здравствуйте!
Речь на сей раз пойдет не о деревьях, а о типе byte...
из ИнтернетАдреса можно извлечь адрес машины это массив из 4 объектов byte.
значение byte от 0 до 255 (так ведь?)

Теперь такая штука:
У меня есть поле
Туда вводится айпи адрес, я разбираю строку на подстроки в массив, и пытаюсь так сделать
byt[j] = Byte.parseByte(str[j]);
он у меня разбирает нормально до примерно 127, а вот 192 и пр. - проблема.
Вылезает NumberFormatException.
И Если вывести этот byt[j], там отрицательные числа

Если я сначала в инт, потом в байт, он более менее нормально их переводит, то есть выводится 192, но потом опять эта ошибка вылезает

Что тут знаковое, что беззнаковое?
Почему так происходит?
...
Рейтинг: 0 / 0
06.05.2005, 10:02
    #33052006
всхлип
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Диплом и сопутствующие вопросы
В Java все типы знаковые. Очень смешно, что "он у меня разбирает нормально до примерно 127". Особенно понравилось слово "примерно" :)

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
 package  test;

 public   class  ParseIP {
   public   static   void  main(String[] args) {
    String ip = "192.168.0.1";
    String[] ss = ip.split("\\.");

     int [] dips =  new   int [ss.length];

     for  ( int  i =  0 , length = ss.length; i < length; i++) {
      String s = ss[i];
       int  dip = Integer.parseInt(s);
      dips[i] = dip;
    }

     for  ( int  i =  0 , length = dips.length; i < length; i++) {
       int  dip = dips[i];
      System.out.println((i +  1 ) + ":\t" + dip);
    }
  }
}
...
Рейтинг: 0 / 0
06.05.2005, 10:10
    #33052019
adf
adf
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Диплом и сопутствующие вопросы
всхлипВ Java все типы знаковые. Очень смешно, что "он у меня разбирает нормально до примерно 127". Особенно понравилось слово "примерно" :)


:) Примерно, потому что для 127.0.0.1 он проходит, когда тестирую на одной машине, а когда для сети, мне надо 192.168.0.1 например, такое число он не дает мне вводить.
Конечно стоило бы поставить эксперимент, типа, когда он начинает вылетать.

Инт - это решение данной проблемы - да. Но мне нужен именно байт
У меня идентификация машин идет по айпи, полученным
Код: plaintext
1.
2.
3.
4.
     InetAddress clnt;

 byte [] ip =  new   byte [ 4 ];
		ip = clnt.getAddress();
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
	
 public   byte [] str_to_address(String sia){
		//проверка и создание адреса
		// в поле вводим адрес в режиме редактирования дерева
		 byte [] bia =  new   byte [ 4 ];
		String[] s =  new  String[ 4 ];//4 эл-та д.б.
		 byte  i =  0 ;
		StringTokenizer st =  new  StringTokenizer(sia,".");
		//разобрали строки на подстроки
		 while  (st.hasMoreTokens()){
			 if  (i> 3 ){  //точек указано больше
				 return   null ;
			}
			String s1 = st.nextToken();
			s[i] = s1;
			i++;
		}		
		 if  (i< 4 ){ //точек указано меньше
				 return   null ;			
		}
		 try 	{
			 for ( int  j= 0 ;j< 4 ;j++){
			bia[j] =  Byte .parseByte(s[j]);
			}
		} catch (NumberFormatException d){
			 return   null ;
		}
		//проверка  на существование если добавляем нового
		 if  (is_add && ctree.is_ip_exist(sia))	{
			alert("Такой ip-адрес уже существует");
			 return   null ;
		}
		 return  bia;		
	}
...
Рейтинг: 0 / 0
06.05.2005, 10:28
    #33052071
всхлип
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Диплом и сопутствующие вопросы
try it :)
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
 package  test;

 import  java.net.*;
 import  java.util.*;

 public   class  ParseIP {
   public   static   void  main(String[] args)  throws  UnknownHostException {
    /* пример преобразования знакового byte в "беззнаковый" byte */
    System.out.println("--- 1 ---");
    InetAddress address = InetAddress.getByName("www.sql.ru");
    System.out.println(address);

     byte [] sqlIP = address.getAddress();

     for  ( int  i =  0 , length = sqlIP.length; i < length; i++) {
       int  dip = sqlIP[i] &  255 ;
      System.out.println((i +  1 ) + ":\t" + dip);
    }

    System.out.println();
    System.out.println("--- 2 ---");

    /* проверка твоего измененного метода */
    String ip = "195.128.121.254"; // sql.ru
     byte [] my = str_to_address(ip);
     for  ( int  i =  0 , length = my.length; i < length; i++) {
       byte  b = my[i]; // знаковый байт
       int  bi = b &  255 ; // "беззнаковый" байт

      System.out.println((i +  1 ) + ":\t" + b + "\t" + bi);
    }
  }

   public   static   byte [] str_to_address(String sia) {
    // проверка и создание адреса
    // в поле вводим адрес в режиме редактирования дерева
     byte [] bia =  new   byte [ 4 ];

    String[] s =  new  String[ 4 ]; //4 эл-та д.б.

     byte  i =  0 ;
    StringTokenizer st =  new  StringTokenizer(sia, ".");

    //разобрали строки на подстроки
     while  (st.hasMoreTokens()) {
       if  (i >  3 ) {  //точек указано больше
         return   null ;
      }
      String s1 = st.nextToken();
      s[i] = s1;
      i++;
    }

     if  (i <  4 ) { //точек указано меньше
       return   null ;
    }

     for  ( int  j =  0 ; j <  4 ; j++) {
       int  a = Integer.parseInt(s[j]);

      bia[j] = ( byte ) a;
    }

    //проверка  на существование если добавляем нового
    // ... skipped ...

     return  bia;
  }
}
...
Рейтинг: 0 / 0
06.05.2005, 10:39
    #33052103
adf
adf
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Диплом и сопутствующие вопросы
Спасибо, сегодня ночью попробую, спасибо!
Большие благодарности - завтра, если зайдете :)

Код: plaintext
1.
2.
       byte  b = my[i]; // знаковый байт
       int  bi = b &  255 ; // "беззнаковый" байт
Не очень поняла конструкцию...
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Диплом и сопутствующие вопросы / 25 сообщений из 32, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]