我正在与imageDraw
合作,但遇到一个奇怪的错误。如果我只是插件值,并且不尝试使用我从其他地方获取的值,那么它可以工作,但是我必须从其他位置绘制边距和线高的值并进行计算。
x = 50;
y = 800;
newImg = imageNew("", x, y);
imageSetAntialiasing(newImg, true);
setup['size'] = lineHeight*dpi;
setup['font'] = "Arial";
imageDrawText(newImg,img.text,topMargin,leftMargin,setup);
当我将imageDrawText中的每个元素放在单独的行上时,错误指向属性集合(设置)。我确实尝试过
setup['size'] = "#lineHeight*dpi#";
但是它也不起作用。
调试顶部的完整错误消息:
处理请求时发生错误
投射的对象时出错 类型
java.lang.Double
不能强制转换为java.lang.String
不兼容的类型。这通常表示Java中存在编程错误, 尽管这也可能意味着您尝试在其中使用异物 与设计不同的方式。java.lang.Double
不能是 强制转换为java.lang.String
答案 0 :(得分:4)
在较旧的ColdFusion版本中(在ColdFusion 2016之前),这是一个错误,因为size
属性被显式强制转换为:(String)size
。并且即使您将值作为String传递,您的值也可能不包含小数位,因为ColdFusion尝试将值解析为Integer:Integer.parseInt((String)size)
// works
setup['size'] = "12";
// works, because literal numbers are casted to String
setup['size'] = 12;
// DOES NOT work, because any math calculation results into a Double
setup['size'] = 12 * 1;
// DOES NOT work, because this is a Double
setup['size'] = 12.1;
您使用setup['size'] = toString(int(...));
的解决方案是解决此错误的正确方法。 int()
确保没有小数位结尾(防止NumberFormatException),toString()
确保传递字符串(防止ClassCastException)。
(这篇文章更像是一条评论,但评论太久了。请随意接受自己的回答。)
答案 1 :(得分:1)
关于寻求帮助的事情为我打开了渠道。找到了解决方案。问题的确是属性集合的setup.size部分。这是有效的方法:
setup['size'] = toString(int(lineHeight*dpi));
不知道为什么要特别指定它为字符串。似乎有点愚蠢,因为我们将其用作数字。