java.lang.NoClassDefFoundError: com / codename1 / ui / ComponentSelector - PullRequest
0 голосов
/ 05 мая 2019

Я пытаюсь добавить собственные карты Google (GoogleMaps.cn) в мой проект CodeNameOne, но у меня ошибка

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

ошибка вызвана этим 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() {
       }



   }

А это и есть OutPut:

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) at sun.reflect.NativeMethodAccessorImpl.invoke0 (собственный метод) at sun.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:43) в java.lang.reflect.Method.invoke (Method.java:498) at 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) at 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 ]

1 голос
/ 06 мая 2019

NoClassDefFoundError означает, что класс присутствует в пути к классам во время компиляции, но не существует в пути к классам во время выполнения.

1 голос
/ 06 мая 2019

Это вызвано тем, что ваши библиотеки проекта и, возможно, плагин устарели. Так что, хотя есть и другие ответы о том, как сделать это в Java для Codename One, ответ немного другой.

Сначала необходимо убедиться, что ваш плагин Codename One обновлен. Это зависит от IDE, но оно должно быть 6 или более новым. Затем запустите Codename One Settings из контекстного меню, которое, я полагаю, вы знаете, как это сделать. В нем перейдите на Basic -> Update Project Libs.

...