Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java小程序-无法从最终类继承_Java_Applet_Classloader_Final - Fatal编程技术网

Java小程序-无法从最终类继承

Java小程序-无法从最终类继承,java,applet,classloader,final,Java,Applet,Classloader,Final,我们有一个java小程序,它可以在大多数客户端环境中正常工作,主要是Windows 7,但最近我们也被要求支持Ubuntu客户端 问题是,当小程序在Ubuntu客户端(运行Firefox和本机安装的“IcedTEA”Java VM 1.7.0_75)上启动时,我们会遇到以下异常: java.lang.VerifyError: Cannot inherit from final class at java.lang.ClassLoader.defineClass1(Native Metho

我们有一个java小程序,它可以在大多数客户端环境中正常工作,主要是Windows 7,但最近我们也被要求支持Ubuntu客户端

问题是,当小程序在Ubuntu客户端(运行Firefox和本机安装的“IcedTEA”Java VM 1.7.0_75)上启动时,我们会遇到以下异常:

java.lang.VerifyError: Cannot inherit from final class
    at java.lang.ClassLoader.defineClass1(Native Method)
    at java.lang.ClassLoader.defineClass(ClassLoader.java:800)
    at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
    at java.net.URLClassLoader.defineClass(URLClassLoader.java:449)
    at java.net.URLClassLoader.access$100(URLClassLoader.java:71)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:361)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
    at net.sourceforge.jnlp.runtime.JNLPClassLoader.access$1701(JNLPClassLoader.java:103)
    at net.sourceforge.jnlp.runtime.JNLPClassLoader$5.run(JNLPClassLoader.java:1636)
    at net.sourceforge.jnlp.runtime.JNLPClassLoader$5.run(JNLPClassLoader.java:1634)
    at java.security.AccessController.doPrivileged(Native Method)
    at net.sourceforge.jnlp.runtime.JNLPClassLoader.findClass(JNLPClassLoader.java:1633)
    at net.sourceforge.jnlp.runtime.JNLPClassLoader.loadClassExt(JNLPClassLoader.java:1670)
    at net.sourceforge.jnlp.runtime.JNLPClassLoader.loadClass(JNLPClassLoader.java:1471)
    at com.renosci.Nlx.chartapplet.NlxBrowserJsEngine.<init>(NlxBrowserJsEngine.java:46)
    at com.renosci.Nlx.chartapplet.UtilityApplet.init(UtilityApplet.java:87)
    at sun.applet.AppletPanel.run(AppletPanel.java:436)
    at java.lang.Thread.run(Thread.java:745)
JSObject是由Java浏览器插件提供的netscape.javascript.JSObject

下面是基类的声明:

public abstract class NlxJsEngine {

谢谢你的见解

我终于找到了原因

如@immibis的注释所示,异常发生在类初始化期间,而不是在实例构造期间

NlxBrowserJsEngine类的一个方法调用另一个类的静态方法,这个类从netscape.javascript.JSObject扩展而来

在另一种情况下,这个JSObject类并没有声明为final,因此扩展它可以很好地工作

在实现中,JSObject是最终的。因此,在IcedTea JVM插件中加载此类时,会引发异常

我不确定这种不兼容是否是代表IcedTea实现者的疏忽,或者是故意的(可能是出于安全原因?)。不管怎样,这都给我们带来了很大的问题


通过广泛的重构可以克服这一点,但是在我们的例子中,这被认为是不值得的,因此我们决定要求用户安装Oracle JVM。

NlxBrowserJsEngine.java第46行是什么?请参见编辑-这是声明类的行您的类有哪些字段声明?如果问题出在NlxBrowserJsEngine本身,它甚至不需要调用(编译器生成的)构造函数。您还记得Java不久前因为它们而受到的一系列负面影响,对吗?@immibis我已经更新以显示字段声明。但是,该方法不是类初始化,而是实例构造吗?
public abstract class NlxJsEngine {