我尝试将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秒)
答案 0 :(得分:1)
这是因为您的项目库和可能的插件已过期。因此,尽管还有其他针对Codename One在Java中执行此操作的答案,但答案却有所不同。
您首先需要确保您的Codename One插件是最新的。这是特定于IDE的,但应为6或更高版本。然后从右键单击菜单中启动“代号一个设置”,假设您知道该怎么做。在其中转到Basic
-> Update Project Libs
。
答案 1 :(得分:1)
NoClassDefFoundError表示该类在编译时存在于类路径中,但在运行时不存在于类路径中。