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

时间:2019-05-05 12:54:43

标签: java google-maps codenameone

我尝试将Google Native Maps(GoogleMaps.cn)添加到我的CodeNameOne项目中,但是出现错误

  

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

该错误是由start方法中的此ligne引起的:

  final MapContainer cnt = new MapContainer(HTML_API_KEY);

我导航到MapContainer,发现很多编译错误,例如这种方法:

  public boolean isNativeMaps() {
}

Netbeans要求我添加退货声明

  public boolean isNativeMaps() {
        return false;
}

但是我认为这段代码是在我们执行程序时自动生成的 因为我已经通过返回语句纠正了所有问题,并且在执行程序时遇到了相同的错误。

这是我的代码:

   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() {
       }



   }

这是输出:

  

java.lang.NoClassDefFoundError:com / codename1 / ui / ComponentSelector   位于com.codename1.googlemaps.MapContainer。(MapContainer.java:173)   位于com.codename1.googlemaps.MapContainer。(MapContainer.java:163)   在com.codename1.uikit.materialscreens.MSUIKit.start(MSUIKit.java:127)   在sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)处   在sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)   在sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)   在java.lang.reflect.Method.invoke(Method.java:498)   在com.codename1.impl.javase.Executor $ 1 $ 1.run(Executor.java:106)   在com.codename1.ui.Display.processSerialCalls(Display.java:1152)   在com.codename1.ui.Display.mainEDTLoop(Display.java:969)   在com.codename1.ui.RunnableWrapper.run(RunnableWrapper.java:120)   在com.codename1.impl.CodenameOneThread.run(CodenameOneThread.java:176)   引起原因:java.lang.ClassNotFoundException:com.codename1.ui.ComponentSelector   在java.net.URLClassLoader.findClass(URLClassLoader.java:381)   在java.lang.ClassLoader.loadClass(ClassLoader.java:424)   在sun.misc.Launcher $ AppClassLoader.loadClass(Launcher.java:335)   在java.lang.ClassLoader.loadClass(ClassLoader.java:357)   在java.lang.ClassLoader.findSystemClass(ClassLoader.java:1004)   在com.codename1.impl.javase.ClassPathLoader.findClass(ClassPathLoader.java:100)   在com.codename1.impl.javase.ClassPathLoader.loadClass(ClassPathLoader.java:50)       ...另外12个   Java结果:1   建立成功(总时间:3秒)

2 个答案:

答案 0 :(得分:1)

这是因为您的项目库和可能的插件已过期。因此,尽管还有其他针对Codename One在Java中执行此操作的答案,但答案却有所不同。

您首先需要确保您的Codename One插件是最新的。这是特定于IDE的,但应为6或更高版本。然后从右键单击菜单中启动“代号一个设置”,假设您知道该怎么做。在其中转到Basic-> Update Project Libs

答案 1 :(得分:1)

NoClassDefFoundError表示该类在编译时存在于类路径中,但在运行时不存在于类路径中。