我尝试将 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/