ayoub mlaouah
ayoub mlaouah

Reputation: 494

java.lang.NoClassDefFoundError: com/codename1/ui/ComponentSelector

I try to add Google Native Maps (GoogleMaps.cn) to my CodeNameOne Project , but i have an error

java.lang.NoClassDefFoundError: com/codename1/ui/ComponentSelector

the error is caused by this ligne in the start method:

  final MapContainer cnt = new MapContainer(HTML_API_KEY);

I navigate to MapContainer and i found many compilation errors like this method:

  public boolean isNativeMaps() {
}

Netbeans seggested me to add a return statment

  public boolean isNativeMaps() {
        return false;
}

but i think this code is generate automaticly when we execute the program because i have corrected all issues by returning statment and i have the same error when i execute the program.

This is my code :

   package com.codename1.uikit.materialscreens;


   import com.codename1.components.InteractionDialog;
   import com.codename1.components.ToastBar;
   import com.codename1.googlemaps.MapContainer;
   import com.codename1.ui.Display;
   import com.codename1.ui.Form;
   import com.codename1.ui.Dialog;
   import com.codename1.ui.Label;
   import com.codename1.ui.plaf.UIManager;
   import com.codename1.ui.util.Resources;
   import com.codename1.io.Log;
   import com.codename1.maps.Coord;
   import com.codename1.messaging.Message;
   import com.codename1.notifications.LocalNotification;
   import com.codename1.notifications.LocalNotificationCallback;
   import com.codename1.ui.Button;
   import com.codename1.ui.Container;
   import com.codename1.ui.EncodedImage;
   import com.codename1.ui.FontImage;
   import com.codename1.ui.SideMenuBar;
   import com.codename1.ui.TextField;
   import com.codename1.ui.Toolbar;
   import com.codename1.ui.geom.Rectangle;
   import com.codename1.ui.layouts.BorderLayout;
   import com.codename1.ui.layouts.BoxLayout;
   import com.codename1.ui.layouts.FlowLayout;
   import com.codename1.ui.layouts.LayeredLayout;
   import com.codename1.ui.plaf.Style;
   import entity.User;
   import java.io.IOException;
   import java.util.List;
   import service.TraitementMedicalService;


   public class MSUIKit {
          private static final String HTML_API_KEY = "AIzaSyBWeRU02YUYPdwRuMFyTKIXUbHjq6e35Gw";

       private Form current;

       public void init(Object context) {
           try {
               Resources theme = Resources.openLayered("/theme");
               UIManager.getInstance().setThemeProps(theme.getTheme(theme.getThemeResourceNames()[0]));
               Display.getInstance().setCommandBehavior(Display.COMMAND_BEHAVIOR_SIDE_NAVIGATION);
               UIManager.getInstance().getLookAndFeel().setMenuBarClass(SideMenuBar.class);
           } catch (IOException e) {
               e.printStackTrace();
           }
       }

       public void start() {
           if (current != null) {
               current.show();
               return;
           }
           Form hi = new Form("Native Maps Test");
           hi.setLayout(new BorderLayout());
           final MapContainer cnt = new MapContainer(HTML_API_KEY);

           Button btnMoveCamera = new Button("Move Camera");
           btnMoveCamera.addActionListener(e->{
               cnt.setCameraPosition(new Coord(-33.867, 151.206));
           });
           Style s = new Style();
           s.setFgColor(0xff0000);
           s.setBgTransparency(0);
           FontImage markerImg = FontImage.createMaterial(FontImage.MATERIAL_PLACE, s, Display.getInstance().convertToPixels(3));

           Button btnAddMarker = new Button("Add Marker");
           btnAddMarker.addActionListener(e->{

               cnt.setCameraPosition(new Coord(41.889, -87.622));
               cnt.addMarker(
                       EncodedImage.createFromImage(markerImg, false),
                       cnt.getCameraPosition(),
                       "Hi marker",
                       "Optional long description",
                        evt -> {
                                ToastBar.showMessage("You clicked the marker", FontImage.MATERIAL_PLACE);
                        }
               );

           });

           Button btnAddPath = new Button("Add Path");
           btnAddPath.addActionListener(e->{

               cnt.addPath(
                       cnt.getCameraPosition(),
                       new Coord(-33.866, 151.195), // Sydney
                       new Coord(-18.142, 178.431),  // Fiji
                       new Coord(21.291, -157.821),  // Hawaii
                       new Coord(37.423, -122.091)  // Mountain View
               );
           });

           Button btnClearAll = new Button("Clear All");
           btnClearAll.addActionListener(e->{
               cnt.clearMapLayers();
           });

           cnt.addTapListener(e->{
               TextField enterName = new TextField();
               Container wrapper = BoxLayout.encloseY(new Label("Name:"), enterName);
               InteractionDialog dlg = new InteractionDialog("Add Marker");
               dlg.getContentPane().add(wrapper);
               enterName.setDoneListener(e2->{
                   String txt = enterName.getText();
                   cnt.addMarker(
                           EncodedImage.createFromImage(markerImg, false),
                           cnt.getCoordAtPosition(e.getX(), e.getY()),
                           enterName.getText(),
                           "",
                           e3->{
                                   ToastBar.showMessage("You clicked "+txt, FontImage.MATERIAL_PLACE);
                           }
                   );
                   dlg.dispose();
               });
               dlg.showPopupDialog(new Rectangle(e.getX(), e.getY(), 10, 10));
               enterName.startEditingAsync();
           });

           Container root = LayeredLayout.encloseIn(
                   BorderLayout.center(cnt),
                   BorderLayout.south(
                           FlowLayout.encloseBottom(btnMoveCamera, btnAddMarker, btnAddPath, btnClearAll)
                   )
           );

           hi.add(BorderLayout.CENTER, root);
           hi.show();

       }

       public void stop() {
           current = Display.getInstance().getCurrent();
       }

       public void destroy() {
       }



   }

And this is the OutPut:

java.lang.NoClassDefFoundError: com/codename1/ui/ComponentSelector at com.codename1.googlemaps.MapContainer.(MapContainer.java:173) at com.codename1.googlemaps.MapContainer.(MapContainer.java:163) at com.codename1.uikit.materialscreens.MSUIKit.start(MSUIKit.java:127) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at com.codename1.impl.javase.Executor$1$1.run(Executor.java:106) at com.codename1.ui.Display.processSerialCalls(Display.java:1152) at com.codename1.ui.Display.mainEDTLoop(Display.java:969) at com.codename1.ui.RunnableWrapper.run(RunnableWrapper.java:120) at com.codename1.impl.CodenameOneThread.run(CodenameOneThread.java:176) Caused by: java.lang.ClassNotFoundException: com.codename1.ui.ComponentSelector at java.net.URLClassLoader.findClass(URLClassLoader.java:381) at java.lang.ClassLoader.loadClass(ClassLoader.java:424) at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:335) at java.lang.ClassLoader.loadClass(ClassLoader.java:357) at java.lang.ClassLoader.findSystemClass(ClassLoader.java:1004) at com.codename1.impl.javase.ClassPathLoader.findClass(ClassPathLoader.java:100) at com.codename1.impl.javase.ClassPathLoader.loadClass(ClassPathLoader.java:50) ... 12 more Java Result: 1 BUILD SUCCESSFUL (total time: 3 seconds)

Upvotes: 0

Views: 273

Answers (2)

Vikram R
Vikram R

Reputation: 776

NoClassDefFoundError means that the class is present in the classpath at Compile time, but it doesn't exist in the classpath at Runtime.

Upvotes: 1

Shai Almog
Shai Almog

Reputation: 52770

This is caused because your project libraries and possibly plugin are out of date. So while there are other answers for how to do this in Java for Codename One the answer is a bit different.

You need to first make sure your Codename One plugin is up to date. This is IDE specific but it should be 6 or newer. Then launch Codename One Settings from the right click menu which I assume you know how to do. In it go to Basic -> Update Project Libs.

Upvotes: 1

Related Questions