Cannot load classes that are not in my "(default package)" in Eclipse

Apr 29, 2010 at 9:47pm

Cannot load classes that are not in my "(default package)" in Eclipse

Hi,
i spent few years with mxj, having my unique “/2-Erdna/eclipse/MyWorkspace/MyMxjClasses/bin” folder in the file “max.java.config.txt”, max loading my classes without problems.

The problem is that I wanted to have others folders, to put my classes, because i want to organize them more clearly.

So, in Eclipse, I tried to make a new project (called “testsClasses”)
/ and i tried also to make a new package (called “test2″) in my original project …

then I put theses new Eclipse folders in “max.java.config.txt” too, like this :

max.dynamic.class.dir /2-Erdna/eclipse/MyWorkspace/MyMxjClasses/bin (this one was already here)
max.dynamic.class.dir /2-Erdna/eclipse/MyWorkspace/MyMxjClasses/bin/test2
max.dynamic.class.dir /2-Erdna/eclipse/MyWorkspace/testsClasses/bin

…But it doesn't works, i cannot load the classes that are my new folders in max…

I get some error messages in the max window : (see picture)

I really don't understand what's happening. i've redone the max/eclipse tutorial from Adam, i think i didn't miss anything. maybe a problem in “max.java.config.txt”. Isn't it possible to have more than one folder for mxj classes ?

Please help!
Thanks!

[attachment=131268,482]

Attachments:
  1. Image_16.png
#50058
Apr 30, 2010 at 1:45pm

Yes it should work. I think the problems may lay in your files. Could you post the code please (and complete file path)?

#179690
Apr 30, 2010 at 3:10pm

Ok, after many tries of changing “max.java.config.txt” and restarting max without success, it finally worked for the classes in my NEW PROJECT after i restarted the macbookpro, hmm… But for my NEW PACKAGE, it still doesn’t work…

max window always say the same :

“java.lang.NoClassDefFoundError: nothing2 (wrong name: test2/nothing2)


(the class ”nothing2” is also in my new package called ”test2” in my ”MyMxjClasses” project)

it’s just a simple class doing nothing, here is the code:

package test2;
import com.cycling74.max.*;
public class nothing2 extends MaxObject {
nothing2 (Atom[] a) {
declareInlets(new int[]{ DataTypes.ALL });
declareOutlets(new int[]{ DataTypes.ALL, DataTypes.ALL });
createInfoOutlet(false);
post(“INIT”);
}
public void bang() {
outlet(0, “BANG RECEIVED”);
}
}

…where the line “package test2;” was automaticaly added by Eclipse (and if i suppress it, it doesn’t compile)

Of course, the class loads perfectly when i put it in one of the other folders.
It looks like i can’t load any class that is inside a package inside a project.

Thanks again for any help,
Alexandre

#179691
Apr 30, 2010 at 8:38pm

Java class files must live in a directory structure identical to their package name. The classpath should points to the root of that directory structure, not to a package subdirectory.

For example, a if you create a class declared like this:

package my.tests;
public class Test1 extends com.cycling74.max.MaxObject {
}

it must be put it in the file ...src/my/tests/Test1.class.

In this case, eclipse will compile it and write the class file to ...bin/my/tests/Test1.class.

You should then set your classpath to …bin, because that directory contains the root of the package hierarchy.

Is this clear?

#179692
May 1, 2010 at 12:39pm

it doesn’t work.
Eclispe put all the classes in their right places as you say, i think.

>>You should then set your classpath to …bin, because that directory contains the root of the package hierarchy.

If i understand well what you explain, as i have some classes in my default package, which are in:
/2-Erdna/eclipse/MyWorkspace/MyMxjClasses/bin,
and also have some classes in the test2 package, which are in:
/2-Erdna/eclipse/MyWorkspace/MyMxjClasses/bin/test2,
i should then only put :
max.dynamic.class.dir /2-Erdna/eclipse/MyWorkspace/MyMxjClasses/bin
in max.java.config.txt ?

then max could find what is in
/2-Erdna/eclipse/MyWorkspace/MyMxjClasses/bin
plus what is in
/2-Erdna/eclipse/MyWorkspace/MyMxjClasses/bin/test2

But this doesn’t work. max doesn’t find the classes in /test2, it just says : “Could not load class ‘nothing2′”. max can only find the classes from the default package of a project.

And, as i said above, when i add :
max.dynamic.class.dir /2-Erdna/eclipse/MyWorkspace/MyMxjClasses/bin/test2
in max.java.config.txt, i then get even more error messages :

java.lang.NoClassDefFoundError: nothing2 (wrong name: test2/nothing2)
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:675)
at com.cycling74.max.MXJClassLoaderImpl.doLoadClass(MXJClassLoaderImpl.java:119)
at com.cycling74.max.MXJClassLoader.loadClazz(MXJClassLoader.java:88)
Could not load class ‘nothing2′

Should i send a message to cycling74 to ask them ?
Thanks,

#179693
May 1, 2010 at 1:41pm

oohhhh, Sorry!

i just realised that i add to put [mxj test2.nothing2] instead of [mxj nothing2]
so stupid…

WORKING NOW…

(true i’m not a java expert.)

#179694

You must be logged in to reply to this topic.