2017-03-23 60 views
2

我正在获取java.lang.UnsupportedOperationException:RectangleReadOnly:此矩形是只读的。 当我试图创建一个Rectangle对象然后旋转它时得到异常。 Jar文件使用IS-com.lowagie.text-2.1.7.jarjava.lang.UnsupportedOperationException:RectangleReadOnly:此矩形在创建矩形对象时为只读

Rectangle pg = PageSize.getRectangle("LETTER"); 
    if (isLandscape) pg = pg.rotate(); (exception coming on this line) 
    if (!TextOp.isEmpty(pageBGColor)) { 
     pg.setBackgroundColor(PDFUtil.getColor(pageBGColor)); 
    } 
    document_ = new Document(pg); 
+0

请使用更新版本的iText再试一次,5.5.11或7.0.2。版本2.1.7自2012年起为EOL:http://stackoverflow.com/documentation/itext/3557/getting-started-with-itext#t=201703151411361159498&a=versions –

+0

版本2.1.7和5.5.11都具有相同的代码在各自的班级。 – user1054949

回答

0

当你

Rectangle pg = PageSize.getRectangle("LETTER"); 

根据a search on GitHub for RectangleReadOnly返回到预定static final Rectangle实施参考由类RectangleReadOnly的对象。这是Rectangle的专门化,它强制它自己的不变性,所以你不能修改你可以要求的“常量”命名矩形。

尝试,而不是

Rectangle pg = new Rectangle(PageSize.getRectangle("LETTER")); 

创建不可改变Rectangle对象的可变克隆来代替。

可能会认为这是图书馆中的一个错误。它应该为你做对象克隆。

+0

一个静态的final只能防止在类中引用是什么,它并不能阻止他在做什么,我可以告诉。我猜在库内的对象被声明为不可修改的。实际上,我用这个jar运行了他的代码,没有抛出异常。不知道那里发生了什么。 –

+0

亲爱的吉姆加里森,我尝试了你提出的解决方案,但没有运气。同样的例外。 Rectangle pg = PageSize.getRectangle(“LETTER”); 和 Rectangle pg = new Rectangle(PageSize.getRectangle(“LETTER”)); 正在做同样的事情。不知道为什么它不改变对象。 – user1054949

+0

您的grepcode链接在itext 5.1.2中显示了“PageSize”的来源。 op表示他使用了itext 2.1.7。你是否检查过这些版本之间的班级是否发生了变化? – mkl