java - 我可以使用运行时参数来修复 Java 中的错误 API 调用吗?

标签 java swing applet jtree illegalstateexception

不确定这里是否适合提问,但我遇到了 Java 问题。我有一些 Java 代码可以在 Java 6 中运行但不能在 Java 7 中运行,错误是:

java.lang.IllegalStateException: This function should be called while holding treeLock

使用 Java6 可行,但我们的一些外部用户正在运行 Java 7。我发现错误是由调用 validateTree() 引起的,它在 java6 中有效,但在 Java7 中我们需要调用 validate() 。当我在本地测试它时,它有效。

这是我的问题,我开始在一家大公司工作,他们不会让我们对代码进行任何更改,直到它被彻底审查(我的工作更改将在 2013 年 4 月生效)但在那之前我们的用户越来越恼火。我不是最擅长 Java 的人,想知道是否有一种方法可以传递运行时参数来改变它?或者我可以在不接触代码库的情况下做些什么?

我很不好意思问这个问题,因为它可以通过实现修复轻松解决,但任何想法或方向都会非常有帮助。

更新:理想情况下,我正在寻找可以支持将所有 validateTree() 引用更改为 validate() 的 java 运行时参数的东西。

最佳答案

Can I use runtime parameters to fix out of bad API calls in Java?

一般来说,不会。

具体情况可以查看类库Java 7版本相关类的源码,看看是否具有向后兼容的特性。


假设您找不到修复程序,那么您就有点卡住了。我建议:

  • 向您的客户推荐他们使用 Java 6,直到发布修复程序。
  • 与您的管理层讨论他们是否可以对他们的政策进行异常(exception)处理以紧急解决此问题。

如果这些都不起作用,那么真正的问题出在您的客户和您的管理层之间。你已经尽力了。交给“上级”处理。


您可能对 my Answer to a related SO Question 感兴趣这涉及到为什么他们做出这个“重大”改变的问题。我的看法是,这种变化是为了迫使人们修复一类隐蔽的、难以重现的应用程序错误,这些错误会导致奇怪的 UI 行为。这是一件好事……从长远来看。

基于此,您可以更有力地发布带外修复程序。将 validateTree() 调用替换为 validate() 调用的修复实际上是所有 Java 平台的必要修复,而不仅仅是 Java 7。

关于java - 我可以使用运行时参数来修复 Java 中的错误 API 调用吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12821047/

相关文章:

Java 小程序被阻止

java - Android 应用程序跳帧,一段时间后崩溃

java - "Comparison method violates its general contract"- 我无法检测到任何不及物性

java - 状态变化颜色变化

Java - 运算符不等于不在字符串的 if 条件下工作

java - 在循环中延迟重新绘制 JPanel

java - 是否无法动态地将文本添加到单个 JTextArea 中?

java - Java Applet 连接我们的服务器调用 PHP 文件时出现问题

java - 如何在 Java 应用程序中显示图像

java - 在 Linux 终端中打开一个小程序