首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我可以使用运行时参数来修复Java中糟糕的API调用吗?

我可以使用运行时参数来修复Java中糟糕的API调用吗?
EN

Stack Overflow用户
提问于 2012-10-10 21:54:45
回答 4查看 1.1K关注 0票数 5

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

代码语言:javascript
复制
java.lang.IllegalStateException: This function should be called while holding treeLock

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

这就是我的问题,我开始在一家大公司工作,他们不允许我们对代码做任何更改,直到它被非常彻底地研究(我的工作更改将在2013年4月生效),但在此之前,我们的用户会感到恼火。我不是最擅长Java的人,我想知道是否有一种方法可以传递运行时参数来改变这一点?或者,有什么我可以做的而不涉及代码库吗?

我很抱歉问这个问题,因为它可以很容易地解决,只需实现修复,但任何想法或方向都会非常有帮助。

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

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-10-10 22:16:42

我可以使用运行时参数来修复

中糟糕的API调用吗?

一般来说,不是。

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

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

  • 建议您的客户使用Java6,直到修复程序可以与您的管理人员进行issued.
  • Discuss,他们是否可以对其策略进行例外处理,以便紧急修复此问题。

如果这些都不起作用,那么真正的问题是你的客户和你的管理层之间的问题。你已经做了你能做的一切。让“上级”来处理吧。

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

在此基础上,您可以提出更有力的理由来发布带外修复。用validate()调用替换validateTree()调用的补丁实际上是所有Java平台的必要补丁,而不仅仅是Java7。

票数 6
EN

Stack Overflow用户

发布于 2012-10-10 22:16:53

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

一种“变通办法”(我可以看到这是不受欢迎的)是:

使用JNLP部署小程序,并使用1.6*J2SE version attribute。详情请参见Java Web Start - Runtime Versioning

注意,它只能嵌入到Plug-in2JRE( 1.6 JRE的子集)中工作&即使这样,客户端也很可能会收到关于“使用早期JRE”的警告。如果小程序可以使用JWS自由浮动启动,它将(假设)在1.4.2+周围工作。

修复方法是更改applet代码,使其与两个JRE兼容,如kleopatra的第二个注释& Stephen C的答案所述。

票数 3
EN

Stack Overflow用户

发布于 2012-10-11 02:49:54

Component#getTreeLock()返回的对象被用作线程同步监视器。在从版本6到版本7的过渡过程中,某些方法的线程安全性已被弃用;示例见here。通常,验证Swing GUI对象是否仅在event dispatch thread上构造和操作。here引用的一种方法可能有助于自动搜索违规行为。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12821047

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档