powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Как определить из-за чего ошибка?
21 сообщений из 21, страница 1 из 1
Как определить из-за чего ошибка?
    #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
Как определить из-за чего ошибка?
    #37652192
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А почему вместо ImageIO.write используется JPEGCodec?
Где объявлена переменная encoder ?
Код работает в многопоточном окружении?
О, мля! ImageIO.write таки используется. А для чего тогда танцы с JPEGCodec вообще???
...
Рейтинг: 0 / 0
Как определить из-за чего ошибка?
    #37652195
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
image = ImageIO.read(new ByteArrayInputStream(item.get()));

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

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



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

до записи файла не доходит, входной файл, грузится нормально, - проверено - правильно определяет размер приятых файлов.
...
Рейтинг: 0 / 0
Как определить из-за чего ошибка?
    #37652315
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
out1 и output для чего нужны? Первое где используется?
...
Рейтинг: 0 / 0
Как определить из-за чего ошибка?
    #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
Как определить из-за чего ошибка?
    #37652930
Фотография ZyK_BotaN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
забыл никimage = ImageIO.read(new ByteArrayInputStream(item.get()));

вот тут вылетает, а дебаггером не пробовал пройтись? Если коротко, то скорее всего проблема в пути файла, на разных системах разные разделители
значит item - нулл.
...
Рейтинг: 0 / 0
Как определить из-за чего ошибка?
    #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
Как определить из-за чего ошибка?
    #37653821
Dflz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
авторНо автору, конечно, не стоило com.sun.* вообще использовать.
И в out1 и в output хранится JPEG одной картинки, созданый двумя разными способами. Нахера так, не знает даже автор.

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

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

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



Потому что нет encoder. Проблема только под gentoo. Соответсвенно там какая-то особая JVM, где даже JPEG encoder отсутствует.
Но автору, конечно, не стоило com.sun.* вообще использовать.
И в out1 и в output хранится JPEG одной картинки, созданый двумя разными способами. Нахера так, не знает даже автор.
ой. я подумал, что то автор указал на данную строку. извиняюсь.
...
Рейтинг: 0 / 0
Как определить из-за чего ошибка?
    #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
Как определить из-за чего ошибка?
    #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
Как определить из-за чего ошибка?
    #37654279
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dflzто преобразование можно заменить на
Если тот код, заменить на этот код, то получится вот такой результат.

Dflzдля дальнешего мне нужен байтовый массив (для cms)
Простой вопрос - зачем 2 раза код делает одно и то же - ставит вас в тупик. Найдите программиста, пусть вам исправит.
...
Рейтинг: 0 / 0
Как определить из-за чего ошибка?
    #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
Как определить из-за чего ошибка?
    #37654413
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Какое нафиг "изменить качество".
Конвертируем картинку в byte[]
Код: java
1.
2.
encoder = JPEGCodec.createJPEGEncoder(out1);
encoder.encode(thumbImage);


Конвертируем картинку в byte[] ещё раз.
Код: java
1.
ImageIO.write(thumbImage, "jpg", out1);
...
Рейтинг: 0 / 0
Как определить из-за чего ошибка?
    #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
Как определить из-за чего ошибка?
    #37654483
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dflzгде здесь byte[]
внутри out1:
out1 = new ByteArrayOutputStream();
...
Рейтинг: 0 / 0
Как определить из-за чего ошибка?
    #37654550
Dflz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
да согласен
ImageIO.write(thumbImage, "jpg", out1);
лишнее, когда
param = encoder.getDefaultJPEGEncodeParam(thumbImage);
работает
за это спасибо, код стал лучше, но причина пока не выясненннна, а это плохо.
...
Рейтинг: 0 / 0
Как определить из-за чего ошибка?
    #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
Как определить из-за чего ошибка?
    #37654673
Dflz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
что-то у меня не получается
thumbImage преобразовать ни в IIOImage , ни в ImageWriter .
...
Рейтинг: 0 / 0
21 сообщений из 21, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Как определить из-за чего ошибка?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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