我正在Django开发一个web服务器,并在一个页面中嵌入了一个Java Applet。
在实例化时,我必须向这个applet传递一个JSon数组。没有任何问题,我在Eclipse中测试过它,没有任何错误或问题。
当我把这个放到网页上时,大问题就出现了。
首先我尝试了Jackson,这是页面上的代码:
<applet name="mapGenerator"
id="mapGenerator"
code="main.MapGenerator.class"
archive="{{STATIC_URL}}jar/MapGenerator.jar,
{{STATIC_URL}}jar/plugin.jar
{{STATIC_URL}}jar/jackson-annotations-2.1.1.jar,
{{STATIC_URL}}jar/jackson-core-2.1.1.jar,
{{STATIC_URL}}jar/jackson-databind-2.1.1.jar"
>
<param name=id value="{{building.id}}">
<param name=piani value='{{floors}}'>
MAYSCRIPT
</applet>
解析Json的Java代码:
public static Floor[] parse(String input, URL codebase) {
ObjectMapper mapper = new ObjectMapper(); // can reuse, share globally
BaseFloor[] bfloors=null;
try {
bfloors = mapper.readValue(input, BaseFloor[].class);
} catch (JsonParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (JsonMappingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
for (int i=0; i < bfloors.length; i++) {
Floor f = new Floor(bfloors[i]);
f.setCodeBase(codebase);
floors[i] = f;
}
return floors;
}
这是我在网页中尝试使用Java控制台时在Java控制台中得到的错误:
Exception in thread "thread applet-main.MapGenerator.class-1" java.lang.NoClassDefFoundError: com/fasterxml/jackson/annotation/JsonAutoDetect
at com.fasterxml.jackson.databind.introspect.VisibilityChecker$Std.<clinit>(VisibilityChecker.java:172)
at com.fasterxml.jackson.databind.ObjectMapper.<clinit>(ObjectMapper.java:195)
at objects.Floor.parse(Floor.java:37)
at main.MapGenerator.loadParameters(MapGenerator.java:67)
at main.MapGenerator.start(MapGenerator.java:31)
at sun.plugin2.applet.Plugin2Manager$AppletExecutionRunnable.run(Plugin2Manager.java:1698)
at java.lang.Thread.run(Thread.java:662)
Caused by: java.lang.ClassNotFoundException: com.fasterxml.jackson.annotation.JsonAutoDetect
at sun.plugin2.applet.Applet2ClassLoader.findClass(Applet2ClassLoader.java:252)
at sun.plugin2.applet.Plugin2ClassLoader.loadClass0(Plugin2ClassLoader.java:250)
at sun.plugin2.applet.Plugin2ClassLoader.loadClass(Plugin2ClassLoader.java:180)
at sun.plugin2.applet.Plugin2ClassLoader.loadClass(Plugin2ClassLoader.java:161)
at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
... 7 more
所以我思考了一些奇怪的实现问题,我尝试使用google-gson。
和以前一样,这里是网页代码:
<applet name="mapGenerator"
id="mapGenerator"
code="main.MapGenerator.class"
archive="{{STATIC_URL}}jar/MapGenerator.jar,
{{STATIC_URL}}jar/gson-2.2.2.jar,
{{STATIC_URL}}jar/plugin.jar
>
<param name=id value="{{building.id}}">
<param name=piani value='{{floors}}'>
MAYSCRIPT
</applet>
和爪哇代码:
public static Floor[] parse(String input, URL codebase) {
Gson gson = new Gson();
BaseFloor[] bfloors = gson.fromJson(input, BaseFloor[].class);
Floor[] floors = new Floor[bfloors.length];
for (int i=0; i < bfloors.length; i++) {
Floor f = new Floor(bfloors[i]);
f.setCodeBase(codebase);
floors[i] = f;
}
return floors;
}
在Eclipse上运行applet时,我没有收到任何错误,但当我在网页上测试时,我收到另一个错误:
java.security.AccessControlException: access denied (java.lang.reflect.ReflectPermission suppressAccessChecks)
at java.security.AccessControlContext.checkPermission(AccessControlContext.java:374)
at java.security.AccessController.checkPermission(AccessController.java:546)
at java.lang.SecurityManager.checkPermission(SecurityManager.java:532)
at java.lang.reflect.AccessibleObject.setAccessible(AccessibleObject.java:107)
at com.google.gson.internal.ConstructorConstructor.newDefaultConstructor(ConstructorConstructor.java:84)
at com.google.gson.internal.ConstructorConstructor.get(ConstructorConstructor.java:66)
at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.create(ReflectiveTypeAdapterFactory.java:71)
at com.google.gson.Gson.getAdapter(Gson.java:353)
at com.google.gson.internal.bind.ArrayTypeAdapter$1.create(ArrayTypeAdapter.java:48)
at com.google.gson.Gson.getAdapter(Gson.java:353)
at com.google.gson.Gson.fromJson(Gson.java:794)
at com.google.gson.Gson.fromJson(Gson.java:761)
at com.google.gson.Gson.fromJson(Gson.java:710)
at com.google.gson.Gson.fromJson(Gson.java:682)
at objects.Floor.parse(Floor.java:33)
at main.MapGenerator.loadParameters(MapGenerator.java:67)
at main.MapGenerator.start(MapGenerator.java:31)
at sun.plugin2.applet.Plugin2Manager$AppletExecutionRunnable.run(Plugin2Manager.java:1698)
at java.lang.Thread.run(Thread.java:662)
Eccezione: java.security.AccessControlException: access denied (java.lang.reflect.ReflectPermission suppressAccessChecks)
下面是我尝试解析的类 BaseFloor,它位于静态函数的同一包中:
package objects;
public class BaseFloor {
public int numero_di_piano;
public String link;
public String bearing;
public float getBearing() {
return Float.parseFloat(bearing);
}
public int getFloor() {
return numero_di_piano;
}
public String getLink() {
return link;
}
public String toString() {
return numero_di_piano + " " + bearing + " " + link;
}
}
这是我传递给applet的JSON:
[{"bearing": "354.00", "link": "/media/floors/Foto_del_63333991-02-2455618_alle_17_35_6.jpg", "numero_di_piano": 0}, {"bearing": "354.00", "link": "/media/floors/IMG_20111009_171138_7.jpg", "numero_di_piano": 1}]
我很好奇:这是我代码实现的问题,还是安全问题,因为我的applet没有签名,所以反射无法使用?
如果你需要什么,自由地问。
提前感谢。
编辑
我已经尝试了您@Nikita的建议,并且错误已更改!
java.security.AccessControlException: access denied (java.lang.RuntimePermission accessDeclaredMembers)
at java.security.AccessControlContext.checkPermission(AccessControlContext.java:374)
at java.security.AccessController.checkPermission(AccessController.java:546)
at java.lang.SecurityManager.checkPermission(SecurityManager.java:532)
at java.lang.SecurityManager.checkMemberAccess(SecurityManager.java:1662)
at java.lang.Class.checkMemberAccess(Class.java:2157)
at java.lang.Class.getDeclaredMethods(Class.java:1790)
at com.fasterxml.jackson.databind.introspect.AnnotatedClass._addMemberMethods(AnnotatedClass.java:593)
at com.fasterxml.jackson.databind.introspect.AnnotatedClass.resolveMemberMethods(AnnotatedClass.java:421)
at com.fasterxml.jackson.databind.introspect.AnnotatedClass.memberMethods(AnnotatedClass.java:243)
at com.fasterxml.jackson.databind.introspect.POJOPropertiesCollector._addMethods(POJOPropertiesCollector.java:442)
at com.fasterxml.jackson.databind.introspect.POJOPropertiesCollector.collect(POJOPropertiesCollector.java:232)
at com.fasterxml.jackson.databind.introspect.BasicClassIntrospector.collectProperties(BasicClassIntrospector.java:142)
at com.fasterxml.jackson.databind.introspect.BasicClassIntrospector.forDeserialization(BasicClassIntrospector.java:81)
at com.fasterxml.jackson.databind.introspect.BasicClassIntrospector.forDeserialization(BasicClassIntrospector.java:11)
at com.fasterxml.jackson.databind.DeserializationConfig.introspect(DeserializationConfig.java:507)
at com.fasterxml.jackson.databind.deser.DeserializerCache._createDeserializer(DeserializerCache.java:326)
at com.fasterxml.jackson.databind.deser.DeserializerCache._createAndCache2(DeserializerCache.java:264)
at com.fasterxml.jackson.databind.deser.DeserializerCache._createAndCacheValueDeserializer(DeserializerCache.java:244)
at com.fasterxml.jackson.databind.deser.DeserializerCache.findValueDeserializer(DeserializerCache.java:143)
at com.fasterxml.jackson.databind.DeserializationContext.findRootValueDeserializer(DeserializationContext.java:342)
at com.fasterxml.jackson.databind.ObjectMapper._findRootDeserializer(ObjectMapper.java:2898)
at com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:2792)
at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:1942)
at objects.Floor.parse(Floor.java:40)
at main.MapGenerator.loadParameters(MapGenerator.java:67)
at main.MapGenerator.start(MapGenerator.java:31)
at sun.plugin2.applet.Plugin2Manager$AppletExecutionRunnable.run(Plugin2Manager.java:1698)
at java.lang.Thread.run(Thread.java:662)
Eccezione: java.security.AccessControlException: access denied (java.lang.RuntimePermission accessDeclaredMembers)
尝试在页面中的 {{STATIC_URL}} jar/插件.jar
后插入逗号。可能是Java插件忽略了杰克逊注释.jar因此而得到没有类的efFoundEror
。
下面是一个类似的问题:在解析 JSON 对象和缺少杰克逊注释
时,没有类定义错误错误 Json 自动检测导致了问题。
我正在尝试调用JSObject。getWindow(this)在JApplet的init方法中,但它无法解析符号。 这个问题特别发生在通过netbeans创建的javafx应用程序项目中,如果在java应用程序项目中使用getWindow,则会得到解决。 我还包含了路径中的。 这是我在netbeans中创建的javafx应用程序项目。
本文向大家介绍微信小程序中weui用法解析,包括了微信小程序中weui用法解析的使用技巧和注意事项,需要的朋友参考一下 前言 在做微信小程序的时候就想着找一个UI库,方便我们前端开发,然后查找资料,发现了这个WeUI特别适合放在微信小程序里。下面就简单的了解一下。 WeUI是一套跟微信原生的视觉体验类似的一套样式库,由微信官方设计团队为微信内网页和小程序设计的,让用户视觉更加统一。包含了外卖常用标
问题内容: 我正在尝试导入WebDriver和ChromeDriver,尝试了所有尝试,但没有运气 摆脱错误 问题答案: 硒罐必须添加到项目中以标识接口和类 硒下载链接:http : //www.seleniumhq.org/download/
问题内容: 我正在尝试导入WebDriver和ChromeDriver,尝试了所有的尝试,但没有运气 摆脱错误 问题答案: 硒罐必须添加到项目中以标识接口和类 硒下载链接:http : //www.seleniumhq.org/download/
我刚刚升级到Play2.4,出于任何原因,我无法加载JDBCMySQL驱动程序。这是我在建的东西。sbt 在刷新(IntelliJ)并运行应用程序后,我仍然收到以下错误 原因:java。lang.ClassNotFoundException:org。mysql。jdbc。驾驶员 我已经搜索过任何潜在的问题,但没有发现任何问题。sbt有什么我不知道的错误吗?
我试图使用for循环迭代一系列的日期,我打算使用plusDays增加开始日期,但是我得到了“Canland resolve method plusDays in date”。下面是我的代码: