Java RMI /Objekte an Konstruktor übergeben

Teeps

Mitglied
hello again,🙂

Hab ein Problem bei der Übergabe eines OBjektes an einen Konstruktor..
nachdem ich das Objekt übergeben habe,ein Objekt erstellt wurde und ich die Variable benutzen möchte ist sie null....

hilfe wäre sehr nett=)

Java:
public class ChannelConnection implements IChannelConnection,Serializable {
	
	public IChatUserCallback usrCallback;//DAS ist die variable die ...
    private String sender;

    public ChannelConnection(IChatUserCallback ucb,String msg,String send){
	  
    	usrCallback = ucb;//....HIER        initialisiert werden soll und....
    	sender = send;
    	if(ucb == null){System.out.println("ucb ist schon im Konstruktor null");}
		
	}
	

	@Override
	public IChannelInformation getInformation() throws RemoteException {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public List<String> getUsers() throws RemoteException {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public void leave() throws RemoteException {
		// TODO Auto-generated method stub

}
	//...und HIER benutzt werden soll,aber null ist ... 
	public void sendMessage(String message) throws RemoteException {
	IChannelMessage messageObj = new ChannelMessage(usrCallback,message,sender);
	//System.out.println("Ich bin die Message an den Channel :"+message);	
	//if (messageObj != null){
	//System.out.println("Ich bin das ChannelMessageObjekt und ich bin nicht null");}
	//if (usrCallback == null){
		//System.out.println("Ich bin das usrCallback und ich bin null,warum bin ich null?");}
	
		
		
	}

}

für tipps und hilfe bin ich dankbar...

liebe grüße

teeps
 
abgesehen von Exceptions, also Abbruch der Aktion, scheint mir nur möglich,
dass entweder null im Konstruktor übergeben wurde (mehr Code, testen mit System.out.println)
oder irgendwann die Variable auf null gesetzt wird, zu verhindern indem die Variable private wird

was auf jeden Fall nicht geht ist,

Java:
IChatUserCallback u = null;
ChannelConnection  c = new ChannelConnection(u,"","");
u = irgendwas;
// jetzt hoffen dass in c u auch gesetzt ist
 
Wenn Du Parameter in public Methoden oder Konstruktoren benutzt, die nicht null sein dürfen oder die Methoden sonst eine Vorbedingung haben, solltest Du das auch entsprechend abchecken und eine IllegalArgumentException werfen.

Java:
public void foo(String s) {
    if (s == null) {
        throw new IllegalArgumentException("hey, s can't be null!");
    }
    // make some magic stuff with s
}

Das spart viel Zeit beim Finden von solchen Fehlern.

Interessant dazu ist auch das hier:

Validate (Commons Lang 2.5 API)

und

Programming With Assertions
 
Zuletzt bearbeitet:
Verstehe ich dich richtig: ChannelConnection ist dein RemoteObjekt welches am Server erstellt wird. Der Server soll jedoch die Möglichkeit haben den Client mittels Callback zu benachrichtigen? Wenn das so ist frag ich mich warum du im Konstruktor das Callback Objekt mit gibst? Das kann nicht funktionieren da das Callback Objekt vom Client an den Server gegeben wird, und dein ChanneclConnection Objekt ja am Server erzeugt wird. Du bräuchtest daher eine eigene Methode nur zum setzen vom Callback Objekt bzw. musst das Callback Objekt bei den Methodenaufrufen mit übergeben.
Kann aber auch sein dass ich da was falsch verstanden habe.
 

Zurück
Oben