Hallo,
ich arbeite gerade an einer simplen Bankkonten-Anwendung. Es gibt u. a. einen BankClient (Client) und eine Bank (Server). Nebst diesen noch einige Interfaces und Implements zur Verwaltung der Kunden und Konten (Objekte). Das ganze läuft über zwei Swing-Fenster, eins für den Kunden und eins für die Bank. Das Bank-Fenster funktioniert einwandfrei und das Auslesen der Kunden- und Kontendaten bereitet keine Probleme. Der Client kann sich zwar anmelden und der lookup() funktioniert auch, aber sobald ich auf bestehende Konten zugreifen möchte erhalte ich folgende Fehlermeldung:
Leider habe ich dazu bislang keine passende Lösung gefunden.
Nachfolgend noch meine beiden mains (BankClient.java und Bank.java):
Danke für eure Hilfe!
ich arbeite gerade an einer simplen Bankkonten-Anwendung. Es gibt u. a. einen BankClient (Client) und eine Bank (Server). Nebst diesen noch einige Interfaces und Implements zur Verwaltung der Kunden und Konten (Objekte). Das ganze läuft über zwei Swing-Fenster, eins für den Kunden und eins für die Bank. Das Bank-Fenster funktioniert einwandfrei und das Auslesen der Kunden- und Kontendaten bereitet keine Probleme. Der Client kann sich zwar anmelden und der lookup() funktioniert auch, aber sobald ich auf bestehende Konten zugreifen möchte erhalte ich folgende Fehlermeldung:
java.rmi.UnmarshalException: error unmarshalling return; nested exception is:
java.io.WriteAbortedException: writing aborted; java.io.NotSerializableException: serverPackage.AccountAdmin
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.getAccountAdmin(Unknown Source)
at clientPackage.ClientGui.loginProcedure(ClientGui.java:96)
at clientPackage.ClientGui.access$4(ClientGui.java:83)
at clientPackage.ClientGui$EventHandling.actionPerformed(ClientGui.java:72)
at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
at javax.swing.AbstractButton.doClick(Unknown Source)
at javax.swing.plaf.basic.BasicMenuItemUI.doClick(Unknown Source)
at javax.swing.plaf.basic.BasicMenuItemUI$Handler.mouseReleased(Unknown Source)
at java.awt.Component.processMouseEvent(Unknown Source)
at javax.swing.JComponent.processMouseEvent(Unknown Source)
at java.awt.Component.processEvent(Unknown Source)
at java.awt.Container.processEvent(Unknown Source)
at java.awt.Component.dispatchEventImpl(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Window.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)
Caused by: java.io.WriteAbortedException: writing aborted; java.io.NotSerializableException: serverPackage.AccountAdmin
at java.ibjectInputStream.readObject0(Unknown Source)
at java.ibjectInputStream.readObject(Unknown Source)
at sun.rmi.server.UnicastRef.unmarshalValue(Unknown Source)
... 34 more
Caused by: java.io.NotSerializableException: serverPackage.AccountAdmin
at java.ibjectOutputStream.writeObject0(Unknown Source)
at java.ibjectOutputStream.writeObject(Unknown Source)
at sun.rmi.server.UnicastRef.marshalValue(Unknown Source)
at sun.rmi.server.UnicastServerRef.dispatch(Unknown Source)
at sun.rmi.transport.Transport$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at sun.rmi.transport.Transport.serviceCall(Unknown Source)
at sun.rmi.transport.tcp.TCPTransport.handleMessages(Unknown Source)
at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(Unknown Source)
at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
Leider habe ich dazu bislang keine passende Lösung gefunden.
Nachfolgend noch meine beiden mains (BankClient.java und Bank.java):
Code:
package clientPackage;
import java.io.IOException;
import java.rmi.*;
import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry;
import serverPackage.AccountInterface;
public class BankClient {
public static void main(String[] args) throws NotBoundException, IOException {
Registry registry = LocateRegistry.getRegistry();
AccountInterface serverObject = (AccountInterface) registry.lookup("AccountAdmin");
ClientGui clientWindow = new ClientGui(serverObject);
}
}
Code:
package serverPackage;
import java.io.IOException;
import java.net.MalformedURLException;
import java.rmi.Naming;
import java.rmi.RemoteException;
import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry;
public class Bank {
public static void main(String[] args) throws IOException {
Account myBank;
AccountAdmin myAdmin;
try {
LocateRegistry.createRegistry( Registry.REGISTRY_PORT );
myBank = new Account();
Naming.rebind("AccountAdmin", myBank);
myAdmin = new AccountAdmin();
Customer customer1 = new Customer("c1", "Hans Günther");
Account accountC1 = new Account(customer1, "a1", 332.45);
myAdmin.addAccount(accountC1);
ServerGui serverWindow = new ServerGui(myAdmin);
} catch (RemoteException e) {
e.printStackTrace();
} catch (MalformedURLException e) {
e.printStackTrace();
}
}
}
Danke für eure Hilfe!