Avatar billede badal Nybegynder
28. november 2003 - 10:16 Der er 19 kommentarer og
1 løsning

Package & classpath

Jeg sidder lige fast i packages og rmi. Jeg ved ikke hvor jeg skal ligge skel og stub filerne henne.
Jeg har lavet en package der har stien: com\netskate\test\Client og classpath: D:\Download\smsc\classes
så har jeg placeret skel og stub filerne i:
D:\Download\smsc\classes

Men jeg får denne fejl meddelse:

java.lang.NoClassDefFoundError: RMIserver
        at java.lang.ClassLoader.defineClass0(Native Method)
        at java.lang.ClassLoader.defineClass(Unknown Source)
        at java.security.SecureClassLoader.defineClass(Unknown Source)
        at java.net.URLClassLoader.defineClass(Unknown Source)
        at java.net.URLClassLoader.access$100(Unknown Source)
        at java.net.URLClassLoader$1.run(Unknown Source)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        at java.lang.ClassLoader.loadClassInternal(Unknown Source)
        at java.lang.Class.forName0(Native Method)
        at java.lang.Class.forName(Unknown Source)
        at sun.rmi.server.LoaderHandler.loadClass(Unknown Source)
        at java.rmi.server.RMIClassLoader$2.loadClass(Unknown Source)
        at java.rmi.server.RMIClassLoader.loadClass(Unknown Source)
        at sun.rmi.server.MarshalInputStream.resolveClass(Unknown Source)
        at java.io.ObjectInputStream.readNonProxyDesc(Unknown Source)
        at java.io.ObjectInputStream.readClassDesc(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.registry.RegistryImpl_Stub.lookup(Unknown Source)
        at java.rmi.Naming.lookup(Unknown Source)
        at com.netskate.test.Client.parseMESSAGE.<init>(parseMESSAGE.java:41)
        at com.netskate.test.SQLStorageMysql.StoreInboundMESSAGE(SQLStorageMysql.java:64)
        at com.netskate.test.SQLStorage.StoreInboundMESSAGE(SQLStorage.java:42)
        at com.netskate.test.test.newMessage(Test.java:75)
        at com.netskate.smsc.MessageDispatcher.newMessage(MessageDispatcher.java:61)
        at com.netskate.smsc.TC35Connection.incomingMessage(TC35Connection.java:181)
        at com.netskate.smsc.TC35Connection$Input.run(TC35Connection.java:319)
Avatar billede _carsten Nybegynder
28. november 2003 - 10:24 #1
Du skal placere stub og skel samme sted som din rmi del

Sandsynligvis her:  com\netskate\test\Client
Avatar billede arne_v Ekspert
28. november 2003 - 10:24 #2
Er der rent faktisk package directiv i klasserne ?

Den leder jo efter en klasse RMIserver uden pakke !
Avatar billede badal Nybegynder
28. november 2003 - 10:29 #3
ja der er package directiv i klasserne

package com.netskate.milcom.Client;
Avatar billede _carsten Nybegynder
28. november 2003 - 10:35 #4
Som Arne siger er det din RMIserver der er problemet - den kan ihvertfald ikke finde klassen

Den initierer du sikkert sådan:  new RMIserver();

Skal måske være:  new package1.package2.package3.RMIserver();
Avatar billede badal Nybegynder
28. november 2003 - 10:42 #5
Hmm det kan muligvis være det. Min RMIserver klasse indeholder næsten intet kode:

package com.netskate.test.Client;

import java.rmi.Remote;
import java.rmi.RemoteException;

public interface RMIserver extends Remote
{
    public int ServerParseMessage(String StrText, String StrSender) throws RemoteException;   
}
Avatar billede _carsten Nybegynder
28. november 2003 - 10:49 #6
Nu kan jeg ikke lige gennemskue hvor du kører tingene fra - men jeg ville mene RMIserver skulle initieres på følgende måde.

new com.netskate.test.Client.RMIserver();
Avatar billede arne_v Ekspert
28. november 2003 - 10:53 #7
Jo - men hvordan er det blevet compilet hvis ikke RMIServer i default pakke
eksisterer ?
Avatar billede badal Nybegynder
28. november 2003 - 10:59 #8
Nu har jeg gjort følgende at jeg har fjernet package henvisningen fra RMIserver klassen. Og lagt class filen i folderen D:\Download\smsc\classes.. Nu ser det ud til at den kan finde class filen men giver istedet for denne fejl : java.lang.ClassCastException
Avatar billede _carsten Nybegynder
28. november 2003 - 11:17 #9
Tja - et eller andet sted caster du til noget som ikke kan lade sig gøre

Kan du ikke lave nogle:  System.out.println("Nu er jeg nået hertil");

Så du kan følge hvor langt hen det virker
Avatar billede _carsten Nybegynder
28. november 2003 - 11:28 #10
Og jeg går ud fra at du fod på Arne's kommentar 28/11-2003 10:53:06
Avatar billede badal Nybegynder
28. november 2003 - 12:04 #11
selve rmi klassern ligger i folderen:
package com.netskate.test.Client;
og klassen som benytter filerne ligger i folderen:
package com.netskate.test;
import com.netskate.test.Client.*; (sådan bliver filen importeret)

Den kan sagtens compilere men det er først når programmet starter op at den brokker sig over at den ikke kan finde RMIserver.class.

Class path har jeg sat på følgende måde:

C:\Progra~1\Java\j2re1.4.2\bin\java -classpath classes/;log4j.jar;log4j-core.jar;D:\Download\message\classes com.netskate.message.Server 1278.cfg
Avatar billede _carsten Nybegynder
28. november 2003 - 13:33 #12
Udfra din classpath må com jo ligge i classes !
Og hvis du bruger du rmic -v1.2 til kompilere RMIserver
så er der vel kun den classcast exception tilbage som du skal
have løst - så den skal du finde, ellers kan jeg ikke lige
finde på mere pt.
Jeg ved ikke om Arne har nogle andre forslag?
Avatar billede badal Nybegynder
28. november 2003 - 14:12 #13
hej carsten ... Jeg tror fejlen ligger her i konstruktøren. Det er her jeg får
fejlen java.lang.ClassCastException.

private Server server;
...
..
konstruktør _>

try
        {
            server = (RMIserver) Naming.lookup ("rmi://" + STRhost + "/Server");
        }
        catch(Exception ex)
        {
            System.out.println("Exception in parseMessage() constructor, class parseMessage: " + ex);
        }
Avatar billede badal Nybegynder
28. november 2003 - 14:25 #14
Ok jeg opgiver. Jeg må lave det på en måde uden brug af rmi
Avatar billede _carsten Nybegynder
28. november 2003 - 14:30 #15
Du skal hellere begynde her: http://java.sun.com/docs/books/tutorial/rmi/
Avatar billede badal Nybegynder
28. november 2003 - 15:02 #16
Hmmm ja det sjove er at programmet virker hvis der ikke benyttes pakker. Men lige så snart at jeg begynder at benytte pakker går det galt for så kan den ikke finde en klasse.
I skal begge have tak for jeres hjælp.
Avatar billede arne_v Ekspert
28. november 2003 - 15:11 #17
Selvfølgelig kan RMI laves med pakker.

Hvis du kan zippe og lægge koden til dowbload (eller emaile den), så
må vi kunne finde en løsning.
Avatar billede _carsten Nybegynder
28. november 2003 - 16:24 #18
Hvis det kan køre uden pakker, kan det også køre med pakker.

Fandt lige en rimelig kort og rimelig fornuftig forklaring vedrørende pakker:
http://jarticles.com/package/package_eng.html  Prøv at kigge på den
Avatar billede badal Nybegynder
30. november 2003 - 23:16 #19
Problemet var at den RMI del jeg lavede fungere fint nok alene og kunne også godt køre fra 2 maskiner.
Men klient delen skulle integreres ind i et større program og det var her at den ikke kunne finde server filen.
Der begyndte at opstå et tidspres så jeg fjernede rmi delen. Og så kunne programmet godt integreres og virkede også.
Jeg havde desværre ikke lige mulighed for at zippe koden da mit firma nok ikke ville have været så glade for det.
jeg takker jer begge for den store hjælp jeg fik :)
Avatar billede badal Nybegynder
19. maj 2004 - 18:51 #20
svar
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester