在Java和Eclipse Framework中处理不同的扩展

时间:2017-10-10 06:34:32

标签: eclipse-plugin eclipse-rcp

我们在缩放监视器上使用Paperclips(SWT打印库)时遇到问题,但我不认为它与框架有关,而且与Eclipse环境有关。

让我们看一个例子:

enter image description here

左边是没有缩放(或100%)的打印,右边是在具有175%缩放率的显示器上开始的相同打印。我知道你在想什么:显示器及其分辨率/缩放应该对打印没有影响。对,应该。

虽然这很难过,但这并不是什么大问题。但是还有一个问题:上面的打印是由作为插件测试运行的JUnit测试用例生成的。如果我将它们作为常规单元测试运行两者工作。

显然,当在OS​​Gi上下文中启动时,Eclipse环境中的某些东西的工作方式不同,我试图找出它是什么(所以我可以阻止它)。

我认为这是一个很好的谜题。

如果您需要提示SWT类可能是什么,我将其缩小到该文件的ScalePrint.java(即如果我从我的演示中移除ScalePrint的实例,表格显示正确;但标题仍然错误)。

我可以确认错误仅存在于Eclipse 4.6中,而不是4.5或3.7(这并不奇怪,因为4.6是第一个支持扩展的版本)。如果我将-Dswt.autoScale=100添加到VM选项以禁用缩放,它也会按预期工作。

我可以追加我的测试用例,但正如我所说,我并不认为它与Paperclips本身有任何关系。

那么......与在普通Java应用程序中运行相同代码相比,什么可能会破坏整个Eclipse框架的扩展?

1 个答案:

答案 0 :(得分:0)

问题是使用类Transform,它本身使用静态字段DPIUtil.deviceZoom(以DPIUtil.autoScaleUp(float dx)的形式)。

由于DPIUtil.deviceZoom是一个静态字段,因此当与具有缩放功能的主监视器一起使用时,一切都会失败(因为打印机不会这样做)。