【问题标题】:java.lang.NoClassDefFoundError: com/codename1/ui/ComponentSelectorjava.lang.NoClassDefFoundError: com/codename1/ui/ComponentSelector
【发布时间】:2019-09-23 07:40:49
【问题描述】:

我尝试将 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(Native Method) 在 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 秒)

【问题讨论】:

    标签: java google-maps codenameone


    【解决方案1】:

    这是因为您的项目库和可能的插件已过期。因此,虽然对于如何在 Java 中为 Codename One 执行此操作还有其他答案,但答案有点不同。

    您需要首先确保您的 Codename One 插件是最新的。这是特定于 IDE 的,但它应该是 6 或更高版本。然后从右键菜单中启动 Codename One Settings,我假设您知道该怎么做。在里面去Basic -> Update Project Libs

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-06-01
        • 2013-12-16
        • 2012-12-02
        • 2019-11-25
        • 2014-03-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多