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

我可以使用运行时参数修复Java中的错误API调用吗?,java,swing,applet,jtree,illegalstateexception,Java,Swing,Applet,Jtree,Illegalstateexception,不确定这是否是正确的提问点,但我有一个Java问题。我有一些Java代码可以在Java 6中工作,但不能在Java 7中工作,错误是: java.lang.IllegalStateException: This function should be called while holding treeLock 使用Java6是可行的,但是我们的一些外部用户正在运行Java7。我发现错误是由调用validateTree()引起的,它在java6中工作,但在Java7中我们需要调用validate(

不确定这是否是正确的提问点,但我有一个Java问题。我有一些Java代码可以在Java 6中工作,但不能在Java 7中工作,错误是:

java.lang.IllegalStateException: This function should be called while holding treeLock
使用Java6是可行的,但是我们的一些外部用户正在运行Java7。我发现错误是由调用
validateTree()
引起的,它在java6中工作,但在Java7中我们需要调用
validate()
。当我在本地测试它时,它工作了

这是我的问题,我开始在一家大公司工作,他们不会让我们对代码进行任何更改,直到它被彻底检查(我的工作更改将在2013年4月生效),但在此之前,我们的用户会感到恼火。我不是Java的高手,我想知道是否有一种方法可以通过传递运行时参数来改变它?或者我能做些什么而不触及代码库

我迫不及待地问这个问题,因为它可以很容易地通过实施修复来解决,但任何想法或方向都会非常有用

更新:理想情况下,我希望在java运行时参数中加入一些可以将所有validateTree()引用更改为validate()的支持

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

一般来说,没有

在特定情况下,您可以查看类库的Java 7版本的相关类的源代码,以查看是否存在向后兼容属性


假设你找不到解决办法,你就有点卡住了。我建议:

  • 建议您的客户在发布修复程序之前使用Java 6
  • 与您的管理层讨论他们是否可以对其政策破例,以便紧急解决此问题
如果两者都不起作用,那么真正的问题是你的客户和你的管理层之间。你已经尽你所能了。让“上级”来处理吧


你可能会对他们为什么做出这种“突破性”改变的问题感兴趣。我的看法是,这一变化是为了迫使人们修复一类潜在的、难以重现的应用程序错误,这些错误会导致奇怪的UI行为。这是一件好事。。。从长远来看

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

我有一些Java代码可以在Java6中工作,但不能在Java7中工作

一个“解决办法”(我可以看出这不受欢迎)是:

使用JNLP部署小程序,并使用
1.6*
的。有关详细信息,请参阅

注意,它只能嵌入到插件2JRE(1.6JRE的子集)中工作&即使如此,客户端也可能会收到关于“使用早期JRE”的警告。如果小程序可以使用JWS自由浮动启动,它将(据推测)在1.4.2+左右工作


正如kleopatra的第二条评论和Stephen C的回答所述,修复它以将applet代码更改为与两个JRE兼容。

返回的对象用作线程同步监视器。在从版本6到版本7的转换过程中,某些方法的线程安全性被弃用;我们可以看到一个例子。通常,请验证Swing GUI对象是否仅在上构造和操作。引用的其中一种方法可能有助于自动搜索违规行为。

要更快获得更好的帮助,请发布一条显示该行为的信息(最好是在混合应用程序/小程序中).在这种情况下,只需告诉客户它只在Java 6下工作,特别是因为您的公司没有在7下进行测试-Java 7下还有哪些其他问题。主要版本升级需要主要测试良好跟踪:-)不知道解决方案,though@AndrewThompson不需要-只需查看validateTree的代码:他们添加了对treeLock的检查,因此应该由调用此OnRight的方法提供前提条件同步,支持人员告诉客户端使用Java7,但问题是chrome和其他系统会自动将用户更新到最新版本,因此告诉他们卸载,结果只是在几周后再次安装该软件。我为用户感到难过,所以我试图自己解决这个问题(我对这段代码不负责),只是想帮助他们。抱歉,我不想因为发布实际代码而陷入麻烦。是的,这是一个输入错误。谢谢你的回答非常有用,我找不到任何向后兼容属性,这是否意味着我完全运气不佳,或者我可以通过某种方式将一个参数替换为validateTree()。我不认为这是可能的,但我想在我的生活故事中有某种象征性的联系。谢谢你的提示,斯蒂芬!我想我是这样建议的,但是默认情况下,在Java控制面板中,Java6和Java7是启用的,Java7正在接管并给出错误(如果Java7被取消选中,那么它可以工作)。这是我意识到我可以在运行时改变java行为的地方,所以我正在寻找一种发送参数的方法。我想我需要等待我们的公司实施修复-(我这样做了,但效果很好。问题是要花很长时间才能将此代码推向生产。在interm中,我试图看看是否可以在客户端实现一些功能(例如使用参数或设置来克服此问题).当然是真的…只是这不是这里的问题:文档没有更改-它总是将获取监视器的责任推到调用代码(validateTree的)上。对于7,它“仅”出于任何原因添加了一个前提条件检查
if (System.getProperty("java.version").startsWith("1.6")) {
...
} else{
...
}