coldfusion imageDraw java.lang. Двойной нельзя привести к java.lang.String - PullRequest
1 голос
/ 04 июля 2019

Я работаю с 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

Ответы [ 2 ]

4 голосов
/ 05 июля 2019

Это ошибка в более старых версиях 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(), чтобы убедиться, что вы передаете String (предотвращая ClassCastException).

(Этот пост больше похож на замечание, но слишком длинный для комментария. Не стесняйтесь принять свой собственный ответ.)

1 голос
/ 04 июля 2019

Есть кое-что о просьбе о помощи, которая открывает мне каналы. Нашел решение. Проблема действительно была частью setup.size коллекции атрибутов. Вот что сработало:

setup['size'] = toString(int(lineHeight*dpi));

Не знаю, почему он хочет, чтобы это была строка. Кажется глупым, потому что мы используем его как число.

...