Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Как определить из-за чего ошибка? / 21 сообщений из 21, страница 1 из 1
08.02.2012, 17:13:58
    #37652175
Dflz
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как определить из-за чего ошибка?
вот такой код

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
try {
                            image = ImageIO.read(new ByteArrayInputStream(item.get()));
                            thumbWidth = 700;
                            // Make sure the aspect ratio is maintained, so the image is not skewed
                            imageWidth = image.getWidth(null);
                            imageHeight = image.getHeight(null);
                            imageRatio = (double) thumbWidth / (double) imageWidth;
                            thumbHeight = (int) (imageHeight * imageRatio);
                            // Draw the scaled image
                            thumbImage = new BufferedImage(thumbWidth, thumbHeight, BufferedImage.TYPE_INT_RGB);
                            graphics2D = thumbImage.createGraphics();
                            graphics2D.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR);
                            graphics2D.drawImage(image, 0, 0, thumbWidth, thumbHeight, null);
                            // Write the scaled image to the outputstream
                            out1 = new ByteArrayOutputStream();
                            encoder = JPEGCodec.createJPEGEncoder(out1);
                            param = encoder.getDefaultJPEGEncodeParam(thumbImage);   ///////////////////////////////////////////////////// здесь вылетает с ошибкой
                            int quality = 100; // Use between 1 and 100, with 100 being highest quality
                            quality = Math.max(0, Math.min(quality, 100));
                            param.setQuality((float) quality / 100.0f, false);
                            encoder.setJPEGEncodeParam(param);
                            encoder.encode(thumbImage);
                            output = new ByteArrayOutputStream();
                            ImageIO.write(thumbImage, "jpg", output);
                            fileData = output.toByteArray();
                        } catch (Exception e) {
                            Logger.getLogger("--").log(Level.WARNING, e);
                            continue;
                        }


ошибка java.lang.NullPointerExeption
но вылетает только на машине где устанолена gentoo
на машинах с debian и windows работает как надо
в чем может быть проблема? в java? в tomcat?
...
Рейтинг: 0 / 0
08.02.2012, 17:20:06
    #37652192
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как определить из-за чего ошибка?
А почему вместо ImageIO.write используется JPEGCodec?
Где объявлена переменная encoder ?
Код работает в многопоточном окружении?
О, мля! ImageIO.write таки используется. А для чего тогда танцы с JPEGCodec вообще???
...
Рейтинг: 0 / 0
08.02.2012, 17:20:31
    #37652195
забыл ник
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как определить из-за чего ошибка?
image = ImageIO.read(new ByteArrayInputStream(item.get()));

вот тут вылетает, а дебаггером не пробовал пройтись? Если коротко, то скорее всего проблема в пути файла, на разных системах разные разделители
...
Рейтинг: 0 / 0
08.02.2012, 17:25:24
    #37652212
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как определить из-за чего ошибка?
и вообще, catch надо\можно чаще ставить, а не в конце всей БЛ
...
Рейтинг: 0 / 0
08.02.2012, 18:05:22
    #37652292
Dflz
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как определить из-за чего ошибка?
BlazkowiczА почему вместо ImageIO.write используется JPEGCodec?
Где объявлена переменная encoder ?
Код работает в многопоточном окружении?
О, мля! ImageIO.write таки используется. А для чего тогда танцы с JPEGCodec вообще???

код взял из просторов инета, если есть вариант лучше - предложи, с удовольствием использую.
код часть jsp страницы, обрабатывает загружаемые картинки, пересчитывает размер.
Код: java
1.
2.
 JPEGEncodeParam param;
 JPEGImageEncoder encoder;



дебагером не пройти - это сайт на opencms, в качестве системы разработки приспособил netbeans.
catch можно и чаще, но определено - логером, потому работало как скопировал..

до записи файла не доходит, входной файл, грузится нормально, - проверено - правильно определяет размер приятых файлов.
...
Рейтинг: 0 / 0
08.02.2012, 18:13:59
    #37652315
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как определить из-за чего ошибка?
out1 и output для чего нужны? Первое где используется?
...
Рейтинг: 0 / 0
08.02.2012, 18:21:32
    #37652329
Dflz
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как определить из-за чего ошибка?
Blazkowiczout1 и output для чего нужны? Первое где используется?

промежуточные переменные. (обрабатывается в цикле множество загуженных за раз файлов)

первое используется только тут

Код: java
1.
2.
out1 = new ByteArrayOutputStream();
encoder = JPEGCodec.createJPEGEncoder(out1);



второе только тут

Код: java
1.
2.
3.
output = new ByteArrayOutputStream();
ImageIO.write(thumbImage, "jpg", output);
fileData = output.toByteArray();
...
Рейтинг: 0 / 0
09.02.2012, 04:48:41
    #37652930
ZyK_BotaN
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как определить из-за чего ошибка?
забыл никimage = ImageIO.read(new ByteArrayInputStream(item.get()));

вот тут вылетает, а дебаггером не пробовал пройтись? Если коротко, то скорее всего проблема в пути файла, на разных системах разные разделители
значит item - нулл.
...
Рейтинг: 0 / 0
09.02.2012, 12:14:08
    #37653396
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как определить из-за чего ошибка?
ZyK_BotaNзабыл никimage = ImageIO.read(new ByteArrayInputStream(item.get()));

вот тут вылетает, а дебаггером не пробовал пройтись? Если коротко, то скорее всего проблема в пути файла, на разных системах разные разделители
значит item - нулл.
В жжоте оба. Авто же написал что вылетает в
Код: java
1.
param = encoder.getDefaultJPEGEncodeParam(thumbImage);


Потому что нет encoder. Проблема только под gentoo. Соответсвенно там какая-то особая JVM, где даже JPEG encoder отсутствует.
Но автору, конечно, не стоило com.sun.* вообще использовать.
И в out1 и в output хранится JPEG одной картинки, созданый двумя разными способами. Нахера так, не знает даже автор.
...
Рейтинг: 0 / 0
09.02.2012, 14:35:18
    #37653821
Dflz
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как определить из-за чего ошибка?
авторНо автору, конечно, не стоило com.sun.* вообще использовать.
И в out1 и в output хранится JPEG одной картинки, созданый двумя разными способами. Нахера так, не знает даже автор.

дак я непротив и по другому сделать, покажи как.
автор
Соответсвенно там какая-то особая JVM, где даже JPEG encoder отсутствует.

вот и хочется узнать - JPEG encoder относится к java под конкретную ось?
или не хватает каких-то библиотек?
...
Рейтинг: 0 / 0
09.02.2012, 14:36:45
    #37653830
ZyK_BotaN
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как определить из-за чего ошибка?
BlazkowiczZyK_BotaNпропущено...

значит item - нулл.
В жжоте оба. Авто же написал что вылетает в
Код: java
1.
param = encoder.getDefaultJPEGEncodeParam(thumbImage);



Потому что нет encoder. Проблема только под gentoo. Соответсвенно там какая-то особая JVM, где даже JPEG encoder отсутствует.
Но автору, конечно, не стоило com.sun.* вообще использовать.
И в out1 и в output хранится JPEG одной картинки, созданый двумя разными способами. Нахера так, не знает даже автор.
ой. я подумал, что то автор указал на данную строку. извиняюсь.
...
Рейтинг: 0 / 0
09.02.2012, 14:41:28
    #37653847
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как определить из-за чего ошибка?
Dflzдак я непротив и по другому сделать, покажи как.


Вот этот код.
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
// Write the scaled image to the outputstream
                            out1 = new ByteArrayOutputStream();
                            encoder = JPEGCodec.createJPEGEncoder(out1);
                            param = encoder.getDefaultJPEGEncodeParam(thumbImage);   ///////////////////////////////////////////////////// здесь вылетает с ошибкой
                            int quality = 100; // Use between 1 and 100, with 100 being highest quality
                            quality = Math.max(0, Math.min(quality, 100));
                            param.setQuality((float) quality / 100.0f, false);
                            encoder.setJPEGEncodeParam(param);
                            encoder.encode(thumbImage);



И вот этот:
Код: java
1.
2.
output = new ByteArrayOutputStream();
                            ImageIO.write(thumbImage, "jpg", output);


Далает тоже самое, лишь с небольшой разницей в уровне компресии JPEG. Вопрос в том ЗАЧЕМ двумя разными способами делает одно и тоже? Вопрос не в том КАК, а в том ЗАЧЕМ.

Если параметры JPEG компресии критичны, что мне кажется странным. То тоже самое можно сделать и через общедоступный API
http://www.universalwebservices.net/web-programming-resources/java/adjust-jpeg-image-compression-quality-when-saving-images-in-java
http://blog.carsoncheng.ca/2011/02/how-to-change-jpeg-compression-in-java.html


авторвот и хочется узнать - JPEG encoder относится к java под конкретную ось?
или не хватает каких-то библиотек?
Сначала стоит проверить точную верисю JVM под которой работает приложение в gentoo.
Потом проверить работает ли через ImageIO. Или тоже ошибка будет.
...
Рейтинг: 0 / 0
09.02.2012, 16:49:17
    #37654260
Dflz
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как определить из-за чего ошибка?
то преобразование можно заменить на
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
out1 = new ByteArrayOutputStream();
encoder = JPEGCodec.createJPEGEncoder(out1);
param = encoder.getDefaultJPEGEncodeParam(thumbImage);
int quality = 100; // Use between 1 and 100, with 100 being highest quality
quality = Math.max(0, Math.min(quality, 100));
param.setQuality((float) quality / 100.0f, false);
encoder.setJPEGEncodeParam(param);
encoder.encode(thumbImage);
ImageIO.write(thumbImage, "jpg", out1);
fileData = out1.toByteArray();



для дальнешего мне нужен байтовый массив (для cms)
...
Рейтинг: 0 / 0
09.02.2012, 16:55:51
    #37654279
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как определить из-за чего ошибка?
Dflzто преобразование можно заменить на
Если тот код, заменить на этот код, то получится вот такой результат.

Dflzдля дальнешего мне нужен байтовый массив (для cms)
Простой вопрос - зачем 2 раза код делает одно и то же - ставит вас в тупик. Найдите программиста, пусть вам исправит.
...
Рейтинг: 0 / 0
09.02.2012, 17:29:34
    #37654384
Dflz
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как определить из-за чего ошибка?
тут 3 задачи
- изменить размер
Код: java
1.
2.
3.
4.
thumbImage = new BufferedImage(thumbWidth, thumbHeight, BufferedImage.TYPE_INT_RGB);
graphics2D = thumbImage.createGraphics();
graphics2D.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR);
graphics2D.drawImage(image, 0, 0, thumbWidth, thumbHeight, null);


- изменить качество(размерфайла)
Код: java
1.
2.
3.
4.
5.
6.
7.
encoder = JPEGCodec.createJPEGEncoder(out1);
param = encoder.getDefaultJPEGEncodeParam(thumbImage);
int quality = 100; // Use between 1 and 100, with 100 being highest quality
quality = Math.max(0, Math.min(quality, 100));
param.setQuality((float) quality / 100.0f, false);
encoder.setJPEGEncodeParam(param);
encoder.encode(thumbImage);


и 100 стоит временно, в дальнешем должно меняться.
- преобразовать в байтовый массив
Код: java
1.
2.
ImageIO.write(thumbImage, "jpg", out1);
fileData = out1.toByteArray();


для дальнешей обработки. там уже другие классы работают.
...
Рейтинг: 0 / 0
09.02.2012, 17:38:10
    #37654413
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как определить из-за чего ошибка?
Какое нафиг "изменить качество".
Конвертируем картинку в byte[]
Код: java
1.
2.
encoder = JPEGCodec.createJPEGEncoder(out1);
encoder.encode(thumbImage);


Конвертируем картинку в byte[] ещё раз.
Код: java
1.
ImageIO.write(thumbImage, "jpg", out1);
...
Рейтинг: 0 / 0
09.02.2012, 17:49:48
    #37654470
Dflz
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как определить из-за чего ошибка?
Код: java
1.
2.
3.
4.
5.
6.
encoder = JPEGCodec.createJPEGEncoder(out1);
вот это (если убрать заготовки для будущего)
   param.setQuality(1.0, false);
   encoder.setJPEGEncodeParam(param);
определяет качество
encoder.encode(thumbImage);


где здесь byte[]
...
Рейтинг: 0 / 0
09.02.2012, 17:53:58
    #37654483
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как определить из-за чего ошибка?
Dflzгде здесь byte[]
внутри out1:
out1 = new ByteArrayOutputStream();
...
Рейтинг: 0 / 0
09.02.2012, 18:21:46
    #37654550
Dflz
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как определить из-за чего ошибка?
да согласен
ImageIO.write(thumbImage, "jpg", out1);
лишнее, когда
param = encoder.getDefaultJPEGEncodeParam(thumbImage);
работает
за это спасибо, код стал лучше, но причина пока не выясненннна, а это плохо.
...
Рейтинг: 0 / 0
09.02.2012, 18:25:55
    #37654557
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как определить из-за чего ошибка?
Dflzза это спасибо, код стал лучше, но причина пока не выясненннна, а это плохо.
Нет, не стал.
http://docs.oracle.com/javase/1.5.0/docs/guide/2d/api-jpeg/com/sun/image/codec/jpeg/JPEGCodec.html Note that the classes in the com.sun.image.codec.jpeg package are not part of the core Java APIs. They are a part of Sun's JDK and JRE distributions. Although other licensees may choose to distribute these classes, developers cannot depend on their availability in non-Sun implementations. We expect that equivalent functionality will eventually be available in a core API or standard extension.

Перепишите на те примеры, что я привел по ссылкам выше.
...
Рейтинг: 0 / 0
09.02.2012, 19:34:50
    #37654673
Dflz
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как определить из-за чего ошибка?
что-то у меня не получается
thumbImage преобразовать ни в IIOImage , ни в ImageWriter .
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Как определить из-за чего ошибка? / 21 сообщений из 21, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]