2010-08-16 59 views
4

我有一个GUI和一个列表框来显示类中的方法列表。 我可以使用反射来实现它。 但是我可以在选择方法名称的另一个文本区域中查看源代码吗?如何在我自己的JAVA GUI中查看来自jar文件的源代码?

我知道反编译器。但我不想在他们的窗口中看到源代码。

我想使用一些第三方库,以便我可以在我自己的GUI中看到特定方法的源代码。

请建议是否有适用于此的API。

回答

4

您将需要某种可以链接到的反编译器。我不确定是否有任何库,但是这里有一个链接到JD Java Decompiler

请记住,在编译过程中会丢失变量名等,因此如果反编译生成的源代码可能会降低可读性。

如果您有权访问源,可以将其链接到类文件,并在链接的源文件中找到所选的方法源。这可以通过对源文件进行简单的单步解析来实现。

你的最大的问题将是确定何时一个方法结束,并且一个简单的解决方案是计算{的和}的,并确定当所述方法声明的{被关闭。

+0

我有一个解决方案。但要检查是否可行。如您所说,我们可以使用一些反编译器并获取完整的源代码。 然后我们可以使用eclipse库来解析使用AST的代码,然后找到相应的方法。 理论上这个解决方案应该可以工作。但是我想花一些精力来实现这个使用eclipse库。 感谢大家帮助我找到解决方案。 – Sreejesh 2010-08-18 11:14:17

0

我曾经创建过包含它自己的源代码查看器的应用程序。我认为这是反编译器的一个很好的选择,反编译器可以有相当的依赖性。

我在使用NetBeans,所以打包.java文件就像更改一个筛选器选项一样简单。我检查了java属性来查找jar文件,并像扫描java源文件的任何zip文件一样对其进行扫描。采用这种方法的GUI具有填充了源文件的JTreeTable和显示源代码的JTextArea是微不足道的。

我相信你可以做同样的事情多加一步 - 裁剪源只包含选定的方法。我认为它应该归结为简单的解析器,一个用于计算开放和关闭括号的解析器。

0

如果您需要它,我会离开较早的答案,但JODE尚未更新很久。在周围搜索,我找不到任何开源的反编译器或以库的形式提供的反编译器。

JODE可能正是你想要的。核心反编译器在GNU LGPL下作为一个库发布,因此您可以将它集成到您​​的程序中,而不会出现任何问题。

1

这是一个古老的问题,但在过去的一年里,由于反编译器的风景发生了显着变化,我觉得值得复活。

Procyon是一个开源框架,其中包含一个Java反编译器。它是用Java编写的,反编译器API可以很容易地集成到另一个应用程序中。实际上,已经有两个第三方GUI前端,包括SecureTeam Java Decompiler

CFR还没有可用的源代码,但它也是一个优秀的反编译器。它也是用Java编写的,尽管我没有尝试将它与现有应用程序集成,但它当然应该是可能的。