Toon posts:

java objecten versturen

Pagina: 1
Acties:

Verwijderd

Topicstarter
hallo,

Ik probeer met java werkelijke objecten over te sturen.
Ik maak een object Frame waar wat waarden in zitten en probeer deze op te sturen.
Doormiddel van wat handleidingen enz is het me gelukt om een behoorlijke code in elkaar te zetten. Alleen natuurlijk werkt die niet (anders had ik niet gepost).

Ik krijg een exception bij het versturen van het object. En krijg waarschijnlijk daardoor ook een exception bij het ontvangen van het object.
De vraag is natuurlijk of iemand hier het weet. Ik heb zoals ik zei meerdere handleidingen erop na gekeken, heb hier 2 java boeken liggen en zie de fout helaas niet.

Hieronder staat mijn send code. Voor zover ik weet zou die goed moeten zijn, maar misschien zien jullie iets wat mis is, of vergeten is.
Ik heb echt van alles geprobeerd en zit er al 3 dagen aan te zoeken.

code:
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
public void setupSend(){
        try{
            Socket s = new Socket(host, poort);
            send(s);
            s.close();
            
            
        }
        catch(IOException e){
            System.out.println("setupSend() connect error");
        }
        
        
    }
    
    
    public void send(Socket s){
        try{
            ObjectOutputStream out = new ObjectOutputStream(s.getOutputStream());
            out.writeObject(frame);
            out.flush();
        }
        catch(IOException e){
            System.out.println("Send() error");
        }
    }


Als jullie meer willen weten van de code of iets dergelijks, moet je het even vragen.
Ik denk namelijk dat het hierin zit!

[ Voor 6% gewijzigd door Verwijderd op 20-10-2005 15:41 ]


  • whoami
  • Registratie: December 2000
  • Laatst online: 23:03
Hoi, het is niet de bedoeling dat wij zomaar die code voor jou gaan debuggen. Jouw post komt bij mij wel zo over.

Je geeft ook te weinig informatie willen we jou kunnen helpen; je zegt bv niet welke exceptie je krijgt, op welke lijn je die krijgt, wanneer je die krijgt, etc...

Maw: geef eens wat meer informatie. Van welk type is 'frame' bv ?

[ Voor 5% gewijzigd door whoami op 20-10-2005 15:44 ]

https://fgheysels.github.io/


  • Eelke Spaak
  • Registratie: Juni 2001
  • Laatst online: 25-04 12:33

Eelke Spaak

- Vlad -

Wat voor exceptions krijg je precies (zowel aan client- & en serverkant)?

Edit: Wat hij zegt ^

[ Voor 17% gewijzigd door Eelke Spaak op 20-10-2005 15:43 ]

TheStreme - Share anything with anyone


Verwijderd

Topicstarter
Eelke Spaak schreef op donderdag 20 oktober 2005 @ 15:43:
Wat voor exceptions krijg je precies (zowel aan client- & en serverkant)?

Edit: Wat hij zegt ^
Natuurlijk is het niet de bedoeling dat jullie code gaan debuggen. Maar ik zoek al 3 dagen, en heb het gevoel dat ik misschien wel iets helemaal fout doe. Terwijl ik het boek en dergelijk gevolgd heb.

Ik krijg een exception op het tweede stuk, krijg dus een system.out.println("Send() error");
Dus het zal in dit stuk moeten zitten:
ObjectOutputStream out = new ObjectOutputStream(s.getOutputStream());
out.writeObject(frame);
out.flush();

Daarbij naast heb ik met Ethereal (package sniffer) gekeken of er zoiezo wel wat verzonden wordt.
En dat is dus wel zo. Ik zie actie bij de poort die ik ingesteld heb.

aan de recieve kant heb ik deze code:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
try{
            ObjectInputStream in = new ObjectInputStream(incoming.getInputStream());
            
            try{
                frame = (Frame)in.readObject();
            }catch (ClassNotFoundException ex){
                System.out.println("recieve frame object error");
            }
            
            incoming.close();
            
        }
        catch(IOException e){
            System.out.println("Recieve connection trouble");
        }


en krijg ik de exception Recieve connection trouble.
Dus hoogstwaarschijnlijk het volgende stuk:
ObjectInputStream in = new ObjectInputStream(incoming.getInputStream());

Frame is niks anders dan een zelf gecreeerd Object.

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
public class Frame {
    private String type;
    private int volgnummer;
    private int ack;
    private String data;
    
    
    public Frame(String type, int volgnummer, int ack, String data){
        this.type = type;
        this.volgnummer = volgnummer;
        this.ack = ack;
        this.data = data;
    }
    
    
    public String getType(){
        return type;
    }
}

[ Voor 17% gewijzigd door Verwijderd op 20-10-2005 15:53 ]


  • Erkens
  • Registratie: December 2001
  • Niet online

Erkens

Fotograaf

Ook een mooie manier om je exceptions af te vangen :X
doe eens
code:
1
e.printStrackTrace();

  • Confusion
  • Registratie: April 2001
  • Laatst online: 01-03-2024

Confusion

Fallen from grace

Zou je even "code=java" in je tags willen zetten?

Weet je zeker dat 'frame' in de methode send niet null is?

Wie trösten wir uns, die Mörder aller Mörder?


Verwijderd

Topicstarter
Confusion schreef op donderdag 20 oktober 2005 @ 15:57:
Zou je even "code=java" in je tags willen zetten?

Weet je zeker dat 'frame' in de methode send niet null is?
Ik zal even de hele class posten:
Daarin kun je zien dat frame gevuld word:

Java:
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
/*
 * Class: Recieve.java
 * Datum 18-10-0005
 * versie: 1.0
 * werking: Deze class zorgt ervoor dat een frame verstuurd wordt naar de andere host
 * 
 */

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

public class Send {
    private String host;
    private int poort;
    private Frame frame;
    
    public Send(String host, int poort){
        frame = new Frame("data", 0, 0,"");
        this.host = host;
        this.poort = poort;
        setupSend();
    }
    
    public void setupSend(){
        try{
            Socket s = new Socket(host, poort);
            send(s);
            s.close();
            
            
        }
        catch(IOException e){
            System.out.println("setupSend() connect error");
        }
        
        
    }
    
    
    public void send(Socket s){
        try{
            ObjectOutputStream out = new ObjectOutputStream(s.getOutputStream());
            out.writeObject(frame);
            out.flush();
        }
        catch(IOException e){
            System.out.println("Send() error");
        }
    }
}

  • whoami
  • Registratie: December 2000
  • Laatst online: 23:03
Doe eens wat Erkens zegt.
Bekijk de stacktrace en kijk eens wat de exceptie zegt. (Die zal toch wel een Message property oid hebben).
Adh van die gegevens, moet je meer inzicht verkrijgen in wat de fout nu veroorzaakt.

https://fgheysels.github.io/


  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024

Alarmnummer

-= Tja =-

Frame is niet serializable.

Verwijderd

Topicstarter
ok, ik heb e.printStac.... erin gezet. Goede tip.

Krijg nu:
Java:
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
Waiting for connection:
Connection made:
Waiting for connection:
java.io.NotSerializableException: Frame
   at java.io.ObjectOutputStream.writeObject(java.lang.Object) (/usr/lib/libgcj.so.6.0.0)
   at Send.send(java.net.Socket) (Unknown Source)
   at Send.setupSend() (Unknown Source)
   at Send.Send(java.lang.String, int) (Unknown Source)
   at GoBackN.send() (Unknown Source)
   at GoBackNGui$1.actionPerformed(java.awt.event.ActionEvent) (Unknown Source)
   at javax.swing.AbstractButton.fireActionPerformed(java.awt.event.ActionEvent) (/usr/lib/libgcj.so.6.0.0)
   at javax.swing.AbstractButton$1.actionPerformed(java.awt.event.ActionEvent) (/usr/lib/libgcj.so.6.0.0)
   at javax.swing.DefaultButtonModel.fireActionPerformed(java.awt.event.ActionEvent) (/usr/lib/libgcj.so.6.0.0)
   at javax.swing.DefaultButtonModel.changeState(int, boolean) (/usr/lib/libgcj.so.6.0.0)
   at javax.swing.DefaultButtonModel.setPressed(boolean) (/usr/lib/libgcj.so.6.0.0)
   at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(java.awt.event.MouseEvent) (/usr/lib/libgcj.so.6.0.0)
   at java.awt.Component.processMouseEvent(java.awt.event.MouseEvent) (/usr/lib/libgcj.so.6.0.0)
   at java.awt.Component.processEvent(java.awt.AWTEvent) (/usr/lib/libgcj.so.6.0.0)
   at java.awt.Container.processEvent(java.awt.AWTEvent) (/usr/lib/libgcj.so.6.0.0)
   at java.awt.Component.dispatchEventImpl(java.awt.AWTEvent) (/usr/lib/libgcj.so.6.0.0)
   at java.awt.Container.dispatchEventImpl(java.awt.AWTEvent) (/usr/lib/libgcj.so.6.0.0)
   at java.awt.Component.dispatchEvent(java.awt.AWTEvent) (/usr/lib/libgcj.so.6.0.0)
   at java.awt.LightweightDispatcher.handleEvent(java.awt.AWTEvent) (/usr/lib/libgcj.so.6.0.0)
   at java.awt.Container.dispatchEventImpl(java.awt.AWTEvent) (/usr/lib/libgcj.so.6.0.0)
   at java.awt.Window.dispatchEventImpl(java.awt.AWTEvent) (/usr/lib/libgcj.so.6.0.0)
   at java.awt.Component.dispatchEvent(java.awt.AWTEvent) (/usr/lib/libgcj.so.6.0.0)
   at java.awt.EventQueue.dispatchEvent(java.awt.AWTEvent) (/usr/lib/libgcj.so.6.0.0)
   at java.awt.EventDispatchThread.run() (/usr/lib/libgcj.so.6.0.0)
   at .GC_start_routine (/usr/lib/libgcj.so.6.0.0)
   at .__clone (/lib/tls/i686/cmov/libc-2.3.5.so)
java.io.NotSerializableException: class Frame is not Serializable, and thus cannot be deserialized.
   at java.io.ObjectInputStream.readObject() (/usr/lib/libgcj.so.6.0.0)
   at ThreadedEchoHandler.run() (Unknown Source)
   at java.lang.Thread.run() (/usr/lib/libgcj.so.6.0.0)
test


Ik ga eens kijken of ik iets met deze foutmelding kan op google ofzo.
wich me luck!!

  • sig69
  • Registratie: Mei 2002
  • Laatst online: 02:19
Het antwoord staat hierboven al. Kwestie van de exception lezen (duidelijker kan niet?), dan had dit hele topic niet nodig geweest.

Roomba E5 te koop


  • Erkens
  • Registratie: December 2001
  • Niet online

Erkens

Fotograaf

Verwijderd schreef op donderdag 20 oktober 2005 @ 16:01:
ok, ik heb e.printStac.... erin gezet. Goede tip.

Krijg nu:
Java:
1
java.io.NotSerializableException: Frame


Ik ga eens kijken of ik iets met deze foutmelding kan op google ofzo.
wich me luck!!
dat dacht ik al dat je die kreeg :)
als het goed is heb je de oplossing zo @ google.

Verwijderd

Topicstarter
ja, en natuurlijk heb ik de oplossing gevonden.
Het is natuurlijk implements Sere.... in de frame class.

Bedankt voor jullie hulp.

Groeten, Cybercool

  • whoami
  • Registratie: December 2000
  • Laatst online: 23:03
Erkens schreef op donderdag 20 oktober 2005 @ 16:06:
[...]

dat dacht ik al dat je die kreeg :)
Ik dacht ook dat het zoiets ging zijn.

TS: weet je ook waarom je die Serializable moet implementeren ?

[ Voor 17% gewijzigd door whoami op 20-10-2005 16:17 ]

https://fgheysels.github.io/


  • Macros
  • Registratie: Februari 2000
  • Laatst online: 27-04 11:06

Macros

I'm watching...

Je kan waarschijnlijk geen user interface objecten zoals Frame versturen...
Als je een pakketje verstuurd naar iemand, dan verstuur je toch alleen wat je over wilt zenden en niet delen van je huis?

"Beauty is the ultimate defence against complexity." David Gelernter


  • whoami
  • Registratie: December 2000
  • Laatst online: 23:03
Frame is in dit geval geen user - interface object.....

https://fgheysels.github.io/


Verwijderd

maybe offtopic...

maar waarom gebruik je niet RMI (remote method invocation). Dan is het opeens veel makkelijker.

  • momania
  • Registratie: Mei 2000
  • Laatst online: 18:18

momania

iPhone 30! Bam!

Verwijderd schreef op donderdag 20 oktober 2005 @ 16:34:
maybe offtopic...

maar waarom gebruik je niet RMI (remote method invocation). Dan is het opeens veel makkelijker.
Lijkt me handiger dat de TS eerst leert waarom je geen GUI onderdelen hoort over te sturen aangezien ze anders wel standaard Serializable waren ;)

Net zoals al eerder gezegd met de vergelijking met een huis:
Als ik bijvoorbeeld specificaties van mij ramen wil doorgeven, ga ik niet het hele huis oversturen. ;)

Neem je whisky mee, is het te weinig... *zucht*


  • -FoX-
  • Registratie: Januari 2002
  • Niet online

-FoX-

Carpe Diem!

momania schreef op donderdag 20 oktober 2005 @ 16:59:
[...]

Lijkt me handiger dat de TS eerst leert waarom je geen GUI onderdelen hoort over te sturen aangezien ze anders wel standaard Serializable waren ;)

Net zoals al eerder gezegd met de vergelijking met een huis:
Als ik bijvoorbeeld specificaties van mij ramen wil doorgeven, ga ik niet het hele huis oversturen. ;)
Volgens mij wil de TS ook geen GUI onderdelen doorsturen, Frame is gewoon een zelf gecreeerd object, zal eerder slaan naar de netwerk-term dan naar een Gui component.

Verder denk ik dat het handiger is als je weet hoe Sockets werken alvorens met RMI te beginnen :)

  • momania
  • Registratie: Mei 2000
  • Laatst online: 18:18

momania

iPhone 30! Bam!

-FoX- schreef op donderdag 20 oktober 2005 @ 17:03:
[...]

Volgens mij wil de TS ook geen GUI onderdelen doorsturen, Frame is gewoon een zelf gecreeerd object, zal eerder slaan naar de netwerk-term dan naar een Gui component.
Oh ja.. bij Frame denk ik idd als eerste nog steeds aan een GUI iets :+
Verder denk ik dat het handiger is als je weet hoe Sockets werken alvorens met RMI te beginnen :)
Eensch is :Y)

Neem je whisky mee, is het te weinig... *zucht*


  • Robtimus
  • Registratie: November 2002
  • Laatst online: 20:42

Robtimus

me Robtimus no like you

Macros schreef op donderdag 20 oktober 2005 @ 16:23:
Je kan waarschijnlijk geen user interface objecten zoals Frame versturen...
Als je een pakketje verstuurd naar iemand, dan verstuur je toch alleen wat je over wilt zenden en niet delen van je huis?
momania schreef op donderdag 20 oktober 2005 @ 16:59:
[...]

Lijkt me handiger dat de TS eerst leert waarom je geen GUI onderdelen hoort over te sturen aangezien ze anders wel standaard Serializable waren ;)

Net zoals al eerder gezegd met de vergelijking met een huis:
Als ik bijvoorbeeld specificaties van mij ramen wil doorgeven, ga ik niet het hele huis oversturen. ;)
Uit de API:
public abstract class Component
extends Object
implements ImageObserver, MenuContainer, Serializable
GUI onderdelen zijn dus wel degelijk Serializable en over te sturen! Echter, uit de API van JFrame en vele andere classes:
Warning: Serialized objects of this class will not be compatible with future Swing releases. The current serialization support is appropriate for short term storage or RMI between applications running the same version of Swing. As of 1.4, support for long term storage of all JavaBeansTM has been added to the java.beans package.
Maar met dezelfde JVM aan beide kanten is het wel degelijk mogelijk (mits je eigen subclasses geen non-Serializable members hebben).

More than meets the eye
There is no I in TEAM... but there is ME
system specs


  • Macros
  • Registratie: Februari 2000
  • Laatst online: 27-04 11:06

Macros

I'm watching...

Ik denk dat ze dat meer hebben gedaan voor mensen die perongeluk hun hele gui serializen omdat ze het linken in hun data. Het werkt dan nog wel, maar heeel erg langzaaam...

"Beauty is the ultimate defence against complexity." David Gelernter


  • Robtimus
  • Registratie: November 2002
  • Laatst online: 20:42

Robtimus

me Robtimus no like you

Dan hadden ze de GUI niet serializable moeten maken zodat die mensen exceptions krijgen als ze het proberen. Weten ze meteen dat ze iets fout doen ;)

Nee, volgens mij hebben ze het meer gedaan voor applets; die kun je van te voren in een appletviewer initializen, dan als object saven en dat object dan op een webpagina gooien. Waarom dat dan weer kan weet ik ook niet ;)

Maar goed, complete GUI's doorsturen over een netwerk is zooooo slecht.

More than meets the eye
There is no I in TEAM... but there is ME
system specs

Pagina: 1