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


    Apr 29 2010 | 9:47 pm
    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]

    • Apr 30 2010 | 1:45 pm
      Yes it should work. I think the problems may lay in your files. Could you post the code please (and complete file path)?
    • Apr 30 2010 | 3:10 pm
      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
    • Apr 30 2010 | 8:38 pm
      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?
    • May 01 2010 | 12:39 pm
      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,
    • May 01 2010 | 1:41 pm
      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.)