2017-10-10 111 views
0

我們在縮放的監視器上使用Paperclips(SWT打印庫)時遇到問題,但我認爲這與框架和Eclipse環境無關。在Java和Eclipse框架中處理的縮放比例不同

讓我們看一個例子:

enter image description here

左是沒有調整(或100%)的打印,右邊是相同的打印開始與175%縮放比例在監視器上。我知道你在想什麼:顯示器及其分辨率/縮放應該對打印沒有影響。對,應該。

儘管這很令人傷心,但它並不是什麼大問題。但是出現了踢球者:上述印刷品是由作爲插件測試運行的JUnit測試用例生成的。如果我運行它們作爲常規單元測試工作。

很顯然,在Eclipse環境中,當在OS​​Gi上下文中啓動時,某些東西的工作方式不同,我試圖找出它是什麼(所以我可以阻止它)。

我認爲這是一個很好的謎題。

如果你需要什麼SWT類可能是一個暗示,我把範圍縮小到該文件ScalePrint.java爲表(即,如果我從我的演示中刪除的ScalePrint實例,正確顯示錶,標題是儘管如此,仍然錯誤)。

我可以確認僅在Eclipse 4.6中存在錯誤時,而不是4.5或3.7(這並不完全令人驚訝,因爲4.6是支持縮放所述第一版本)。如果我將-Dswt.autoScale=100添加到VM選項以禁用縮放,則它也可以按預期工作。

我可以附加我的測試用例,但正如我所說,我真的不認爲它與回形針本身有任何關係。

那麼......在整個Eclipse框架啓動時,與在普通Java應用程序中運行相同的代碼相比,什麼會打破擴展?

回答

0

問題是使用類Transform,它本身使用靜態字段DPIUtil.deviceZoom(形式爲DPIUtil.autoScaleUp(float dx))。

由於DPIUtil.deviceZoom是與已經縮放(因爲打印機不)一個主監視器中使用時的靜態字段都失敗。