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

标签 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 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)

最佳答案

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

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

关于java.lang.NoClassDefFoundError : com/codename1/ui/ComponentSelector,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55992165/

相关文章:

java - 如何配置 Equinox 以使其需要在 bundle 依赖项中声明的可选包

java - 在 Java 网格中更改 ImageIcon

Android 集群和标记点击

php - 点击 Google map 上的 HTML 表单

android - 保存路径(不在街道中) - Google API

android - 在 Android 上,int 作为 null 传递给数据库

java - 代号一 - Form.registerAnimated() 有时不注册动画

java - 如何避免使用 PreparedStatement.setNull?

codenameone - IOS 中的后台获取无法正常工作

java - 获取 Java SSLSocket 的可信 X509Certificate