Java 无法重写所有接口方法

Java 无法重写所有接口方法,java,jar,Java,Jar,我已经连续三天这么做了,我找不到答案。需要一些有经验的人的建议。:) 几年前有个程序员离开了我们。我们只有一个.jar文件,没有原始源代码。为了对这个.jar做一些小的调整,我运行了一个反编译器,插入了我们自己的类文件,并修改了.jar中现有的一个类文件来调用它。这是一种在应用程序中的某个特定点插入我们需要的代码的简单方法(这件事情非常庞大,因此对整个项目进行反编译有点令人望而生畏,而且容易出错)。在过去的几年里,这一切都很顺利。然而,上周我发现我们需要一个线程来提高效率 代码一到达线程初始化就

我已经连续三天这么做了,我找不到答案。需要一些有经验的人的建议。:)

几年前有个程序员离开了我们。我们只有一个.jar文件,没有原始源代码。为了对这个.jar做一些小的调整,我运行了一个反编译器,插入了我们自己的类文件,并修改了.jar中现有的一个类文件来调用它。这是一种在应用程序中的某个特定点插入我们需要的代码的简单方法(这件事情非常庞大,因此对整个项目进行反编译有点令人望而生畏,而且容易出错)。在过去的几年里,这一切都很顺利。然而,上周我发现我们需要一个线程来提高效率

代码一到达线程初始化就完全没有错误了。我进一步将其缩小到实际的可运行初始化,然后缩小到我尝试的任何接口。因为我在一个现有的jar文件中运行,所以除了写入自己创建的日志文件之外,我没有任何调试访问权限。所以我可以在Runnable初始化之前写一个日志行,然后什么也不发生

因此,调用设置可运行变量:

Runnable r;
看起来不错,所以找到参考资料没有问题。但是,只要我尝试覆盖该方法:

r = new Runnable(){
    public void run(){

    }
};
此行下面的日志文件的输出永远不会到达。所以我想这可能是一个访问修饰符问题,不管出于什么原因。所以我在运行时检查了它:

Method[] methods = Runnable.class.getDeclaredMethods();
for (int i = 0; i < methods.length; i++) {
    writeToLog("public method: " + methods[i]);
}

如果我能清楚地找到该类及其公共方法,您知道为什么不定义该类吗?

如果您使用的是Maven,您可以尝试在本地Maven存储库中安装JAR,并将其作为依赖项添加到项目中。然后,您将能够在新项目中实际使用这些类并扩展它们

像这样:

此外,IDE(如IntelliJ)将能够为您的应用程序反编译JAR,以便于访问。甚至调试它


另一个想法是,在反编译之后,使用新版本的Java重新编译每个类。jar很可能是用旧版本的Java编译的

编译器版本也是如此。这是一个Java6构建。然而,出于我无法控制的原因,我不得不将其保留为Java6。我没有听说过IntelliJ,但我现在下载它来尝试一下。但与此同时,您能想到为什么可运行初始化会像这样失败吗?是否有一些我不知道的内在java安全性在已经编译的.jar中是活动的?我就是不明白。@mikibrv Intellij为了胜利!谢谢你的建议。那是史诗般的。直到现在我才听说这件事。我现在至少有一条错误消息:java.lang.NoClassDefFoundError。我有研究要做。。。关于为什么会出现这种错误有什么想法吗?我不确定如何将编译后的类插入到jar中。您不可能扩展类并像那样使用它吗?问题是,你是如何使用这个罐子的?
java.lang.NoClassDefFoundError