我们最近将我们的一个(编辑)Linux java应用程序从java 1.5移动到了java 1.6,并且由于两个版本之间的MouseEvent发送似乎发生了变化而感到非常困难,这让我们的应用程序对一些版本非常不满意直到我们追踪它为止。
简而言之,当用户右键单击最终从awt.Canvas派生的类来调出JPopupMenu时,在Java 1.5中,原始画布会接收到鼠标右键事件,但在Java 1.6中我们从未听过鼠标注册事件。这会将我们的应用程序发送到一个tizzy,因为它维护一个内部鼠标按钮映射,并进入一个不一致的状态。
(编辑)此仅适用于Linux - 在Windows上我们在java 1.5和1.6上都接收鼠标注册事件。
我写了一个简短的程序,它创建了一个画布,并通过右键单击触发弹出菜单,并将事件记录到控制台。如果我在java 1.5下编译并运行它并左键单击然后右键单击,我会看到以下内容:
EventCanvas-> mousePressed mb:[L ..]
EventCanvas->发布了mb:[...]
EventCanvas-> mouseClicked mb:[...]
EventCanvas-> mousePressed mb:[.. R]
EventCanvas->发布了mb:[...]
但如果我在java 1.6下做同样的事情,我会看到:
EventCanvas-> mousePressed mb:[L ..]
EventCanvas->发布了mb:[...]
EventCanvas-> mouseClicked mb:[...]
EventCanvas-> mousePressed mb:[.. R]
我的问题,例如:这是众所周知的吗?记录完好?对于这种情况,是否有标准的解决方法?
我们现在又有一个愉快的操作程序,所以这个问题只是出于好奇 - 但我很惊讶在版本之间看到这样的变化。顺便说一句 - 如果有人想告诉我保留鼠标状态的内部地图有点奇怪,也许是这样,但我们在这里谈论一个大型的gui密集遗留应用程序,并且大规模重写并不总是一种选择。
示例代码可在以下位置查看:http://teapot7.com/sample.html
答案 0 :(得分:1)
我的问题,例如:这是众所周知的吗?记录完好?
目前还不完全清楚你的问题是什么(见@ RD的评论),所以我不能说这个问题。
通常,已知会对应用程序产生影响的更改记录在相应的“JDK采用指南”文档中。在JDK 6文档中,AWT section列出了已更改应用程序可能看到的事件的各种修补程序。 (在“事件解雇中的变化”标题下。)其中一个看起来可能描述了你所看到的内容。
可能会记录此类更改的其他位置在发行说明(列出每个次要发行版中的所有修复错误)和错误数据库中。
这是否算作“有据可查”,供您判断。但我认为确实如此。
这种情况是否有标准的解决方法?
一般情况下,除了可以找到修复程序之前回滚到较旧的JVM之外没有...
“Swing / AWT中某些内容发生了变化”的“标准解决方法”是什么?