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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Помогите с RMI приложением. 
:(
    Опции темы
3x3
Дата 10.10.2006, 13:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(unkis @ 10.10.2006,  12:11)
я конечно же попробую, но мне непонятно причём может быть это.

Даже в FAQ на этом форуме простой пример безвсяких там полисов.

При чем факский пример - работает. При этом там особо отмечено как именно клиент должен получать ссылку на заглушку.


--------------------
Зачем платить больше,
когда можно заплатить дважды?
PM   Вверх
unkis
Дата 10.10.2006, 13:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



я не про это пример, а про этот http://vingrad.ru/JAVA-JAV-000103


--------------------
www.unkis.com
PM MAIL WWW   Вверх
powerOn
Дата 10.10.2006, 14:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


software saboteur
****


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

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



попробуйте поменять строку:
Код

Naming.rebind("//127.0.0.1/RemoteCanvas", obj);


на 
Код

Naming.rebind("rmi://localhost:" + port + "/RemoteCanvas", obj);


где port - это порт  который слушает rmi registry 


--------------------
user posted image нет времени думать - нужно писать КОД!

PM MAIL   Вверх
3x3
Дата 10.10.2006, 15:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(unkis @ 10.10.2006,  13:59)
я не про это пример, а про этот http://vingrad.ru/JAVA-JAV-000103

А сам по себе пример работает - если сделать один в один как там написано?


--------------------
Зачем платить больше,
когда можно заплатить дважды?
PM   Вверх
unkis
Дата 10.10.2006, 20:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



да я пробывал в институте этот пример работал.

ну это все не важно.

Теперь дальше.

для того чтоби клиент каждие 3 секунди спрашивал у сервера есть ли для ниго что-то, мне нужно бдет в отдельном треде делать что-то типо такого:

Код

while(beskonechno){
try {
            CanvsInterface obj = (CanvsInterface) Naming.lookup("//127.0.0.1/RemoteCanvas");
           if(obj.hasModifyed()) //если есть изменения то виполняй
           {
            ..........
            ..........
            ..........
           }

        } catch (Exception e) {
            System.out.println("Clien err: " +e.getMessage());
            e.printStackTrace();
        }
}


я тут так попробывал, так ЦПУ грузится на 100%,  думаю что это не правенльно.

Ето правильний подход, или может есть идеи по лучше?







--------------------
www.unkis.com
PM MAIL WWW   Вверх
LSD
Дата 10.10.2006, 21:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


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

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



Цитата(unkis @  10.10.2006,  21:20 Найти цитируемый пост)
я тут так попробывал, так ЦПУ грузится на 100%,  думаю что это не правенльно.

Ну так у тебя пауза между опросами не делается. Добавь в конец цикла:
Код
Thread.sleep(3000);



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


Опытный
**


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

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



Ребята теперь слудующая проблемма.

на сервеере есть Vector<Point2d.Double> points;

и к этому вектору есть также get и add методы.

так вот, когда клиент1 вызывает метод add проблем не возникает, но когда одновременно при этом клиет2 вызывает метод get то выбрасывается ошибка. 

Код

java.rmi.UnmarshalException: error unmarshalling return; nested exception is: 
    java.io.WriteAbortedException: writing aborted; java.io.NotSerializableException: java.awt.geom.Point2D$Double
    at sun.rmi.server.UnicastRef.invoke(Unknown Source)
    at java.rmi.server.RemoteObjectInvocationHandler.invokeRemoteMethod(Unknown Source)
    at java.rmi.server.RemoteObjectInvocationHandler.invoke(Unknown Source)
    at $Proxy0.getPoints(Unknown Source)
    at de.rmi.Client2.run(Client2.java:47)
Caused by: java.io.WriteAbortedException: writing aborted; java.io.NotSerializableException: java.awt.geom.Point2D$Double
    at java.io.ObjectInputStream.readObject0(Unknown Source)
    at java.io.ObjectInputStream.readArray(Unknown Source)
    at java.io.ObjectInputStream.readObject0(Unknown Source)
    at java.io.ObjectInputStream.defaultReadFields(Unknown Source)
    at java.io.ObjectInputStream.readSerialData(Unknown Source)
    at java.io.ObjectInputStream.readOrdinaryObject(Unknown Source)
    at java.io.ObjectInputStream.readObject0(Unknown Source)
    at java.io.ObjectInputStream.readObject(Unknown Source)
    at sun.rmi.server.UnicastRef.unmarshalValue(Unknown Source)


Причем когда просто запускется клент2 без клиет1, то все впорядки, тоесть я так понимаю что получается какая-то колизия?

Что мне делать, и как это исправить?

серверная часть
Код

package de.rmi;

import java.awt.geom.Point2D;
import java.rmi.Naming;
import java.rmi.RemoteException;
import java.rmi.server.UnicastRemoteObject;
import java.util.Vector;


public class ServerCanvasRemote extends UnicastRemoteObject implements CanvsInterface {

    /**
     * 
     */
    private static final long serialVersionUID = -3092163528354693698L;
    
    private Vector<Point2D.Double> points = new Vector<Point2D.Double>();
    
    private boolean modify = false;
    
    
    
    protected ServerCanvasRemote() throws RemoteException {
        
        super();
        
        
    }

    public Vector<Point2D.Double> getPoints() throws RemoteException {
        return points;
    }

    public boolean hasModifyed() throws RemoteException {
        
        return modify;
    }

    public void setPoints(Vector<Point2D.Double> points) throws RemoteException {
        this.points = points;
        
    }

    public void setModify(boolean change) throws RemoteException {
        System.out.println("Old modify: "+modify+" \tNew modify: "+change);
        modify = change;
        
        
    }
    
    public static void main(String[] args) {
        try {
            ServerCanvasRemote obj = new ServerCanvasRemote();
            System.out.println("Server start");
            Naming.rebind("//127.0.0.1/RemoteCanvas", obj);
            System.out.println("'RemoteCanvase' bound in registry");
        } catch (Exception e) {
            System.out.println("RemoteCanvase err: "+e.getMessage());
            e.printStackTrace();
        }
    }

    public void addPoint(int x, int y) throws RemoteException {
        points.add(new Point2D.Double(x,y));
        
    }

}



Клиент1
вот так вот вызывается метод add
Код

public void mouseMoved(MouseEvent e) {
        int x=e.getX(), y = e.getY();
        try {
            obj.addPoint(x, y);
            
        } catch (Exception e1) {
            System.out.println("Clien err: " + e1.getMessage());
            e1.printStackTrace();
        }
        System.out.println("rabotaju ["+x+","+y+"]");
        
    }


Клиент2
Код

public void run() {
        while (!Client2.exit) {
            try {
                System.out.println("Size = "+obj.getPoints().size());
                
                Thread.sleep(150);
            } catch (Exception e) {
                
                e.printStackTrace();
            }
            
        }
    }


Зарание благодарен.



--------------------
www.unkis.com
PM MAIL WWW   Вверх
LSD
Дата 12.10.2006, 11:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


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

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



Зачем ты используешь Point2D.Double? Используй Point.

Цитата(unkis @  12.10.2006,  12:11 Найти цитируемый пост)
Причем когда просто запускется клент2 без клиет1, то все впорядки, тоесть я так понимаю что получается какая-то колизия?

Никаких коллизий нет. Просто как только возникает необходимость передачи данных, ты натыкаешься на то, что передаваемые данные не сериализуемы.


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


Опытный
**


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

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



Цитата(LSD @ 12.10.2006,  11:25)
передаваемые данные не сериализуемы.

огда бы у него и первый клиент не работал бы имхо..


--------------------
Зачем платить больше,
когда можно заплатить дважды?
PM   Вверх
unkis
Дата 12.10.2006, 11:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



хорошо, а как мне их сериализовать надо?

да, хороший вопрос, почему тогда  клиенты по отдельности  работают?


--------------------
www.unkis.com
PM MAIL WWW   Вверх
LSD
Дата 12.10.2006, 12:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


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

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



Первый клиент вызывает метод addPoint() который никаких Point2D.Double не передает и не получает. А второй клиент вызывает getPoints() который получает коллекцию Point2D.Double, причем если она пустая то ошибок тоже не будет, т.к. нечего там сериализовывать.

Проверь будет ли работать метод setPoints() с непустой коллекцией.

Добавлено @ 12:06 
Цитата(unkis @  12.10.2006,  12:38 Найти цитируемый пост)
хорошо, а как мне их сериализовать надо?

Используй java.awt.Point.


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


Опытный
**


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

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



подождите как это не передаёт, а это что?

Код

public void mouseMoved(MouseEvent e) {
        int x=e.getX(), y = e.getY();
        try {

            obj.addPoint(x, y); //вот здесь идёт передача координат
            
        } catch (Exception e1) {
            System.out.println("Clien err: " + e1.getMessage());
            e1.printStackTrace();
        }
        System.out.println("rabotaju ["+x+","+y+"]");
        
    }



--------------------
www.unkis.com
PM MAIL WWW   Вверх
LSD
Дата 12.10.2006, 12:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


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

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



Цитата(unkis @  12.10.2006,  13:08 Найти цитируемый пост)
подождите как это не передаёт, а это что?

Еще раз:
Цитата(LSD @  12.10.2006,  13:05 Найти цитируемый пост)
Первый клиент вызывает метод addPoint() который никаких Point2D.Double не передает и не получает.

Если ты внимательно посмотришь на метод, то увидишь, что он передает два int, и ни одного Point2D.Double.

Добавлено @ 12:17 
Кстати очень странное архитектурное решение, в одну сторону передаем int в другую Point. Надо что-то одно использовать.


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


Опытный
**


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

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



Поменял везде на Point и передовать стал Point а не int, и всё сразу заработало.

Спасибо поехали дальше


--------------------
www.unkis.com
PM MAIL WWW   Вверх
unkis
Дата 27.10.2006, 21:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Ребята столкнулся вот с такой ошибкой.
Почему у меня не получается  передать на сервер BufferedImage?
Связано ето как-то с сереализацией? если да то как мне его сереалезировать и передать?
Код


java.rmi.MarshalException: error marshalling arguments; nested exception is: 
    java.io.NotSerializableException: java.awt.image.BufferedImage
    at sun.rmi.server.UnicastRef.invoke(UnicastRef.java:122)
    at de.rmi.ServerCanvasRemote_Stub.setScreenshot(Unknown Source)
    at de.rmi.Client2.mouseSingleClick(Unknown Source)
    at de.rmi.Client2.mouseClicked(Unknown Source)
    at java.awt.AWTEventMulticaster.mouseClicked(AWTEventMulticaster.java:212)
    at java.awt.Component.processMouseEvent(Component.java:5491)
    at javax.swing.JComponent.processMouseEvent(JComponent.java:3126)
    at java.awt.Component.processEvent(Component.java:5253)
    at java.awt.Container.processEvent(Container.java:1966)Single
Single

    at java.awt.Component.dispatchEventImpl(Component.java:3955)
    at java.awt.Container.dispatchEventImpl(Container.java:2024)
    at java.awt.Component.dispatchEvent(Component.java:3803)
    at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4212)
    at java.awt.LightweightDispatcher.processMouseEvent(Container.java:3901)
    at java.awt.LightweightDispatcher.dispatchEvent(Container.java:3822)
    at java.awt.Container.dispatchEventImpl(Container.java:2010)
    at java.awt.Window.dispatchEventImpl(Window.java:1778)
    at java.awt.Component.dispatchEvent(Component.java:3803)
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:463)
    at java.awt.EventDispatchThread.pumpOneEventForHierarchy(EventDispatchThread.java:242)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:163)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:157)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:149)
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:110)
Caused by: java.io.NotSerializableException: java.awt.image.BufferedImage
    at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1081)
    at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:302)
    at sun.rmi.server.UnicastRef.marshalValue(UnicastRef.java:258)
    at sun.rmi.server.UnicastRef.invoke(UnicastRef.java:117)


вот так он прописан в серверной части
Код

public class ServerCanvasRemote extends UnicastRemoteObject implements CanvsInterface {
...............
..................
private BufferedImage img;
    
    
    protected ServerCanvasRemote() throws RemoteException {
        
        super();
        
        
    }

       public BufferedImage getScreenshot() throws RemoteException {
        
        return img;
    }

    public void setScreenshot(BufferedImage scren) throws RemoteException {
        img = scren;
        
    }
.........
........


вот так я его питаюсь передать с клиента на сервер
Код

        a = new Robot();
    screen = a.createScreenCapture(new Rectangle(Toolkit.getDefaultToolkit().getScreenSize().width,Toolkit.getDefaultToolkit().getScreenSize().height));
                obj.setScreenshot(screen);


Зарание благодарен.


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

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

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


 




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


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

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