2009-12-15 1 views
28

Я программу Java , когда я скомпилировать его я получаю следующее сообщение об ошибкеимпорт com.sun.image.codec.jpeg. *

[javac] ...\MyClass.java:33: package com.sun.image.codec.jpeg does not exist 
[javac] import com.sun.image.codec.jpeg.*; 
[javac]^

что я могу сделать?

Каков правильный способ записи файла изображения, когда пакет com.sun устарел.

ответ

26

Почему вы используете классы в пакете com.sun.image.codec.jpeg? Вы не должны использовать эти классы напрямую: Why Developers Should Not Write Programs That Call 'sun' Packages.

Что делает ваша программа? Он просто пытается читать или писать JPG-изображение? Это очень просто с API ImageIO. См. Этот учебник: Writing/Saving an Image.

Дополнение - Пакет com.sun.image.codec.jpeg был удален на Java 7, как указано в Java SE 7 and JDK 7 Compatibility Guide.

Синопсис: нестандартном com.sun.image.codec.jpeg Пакет Пенсионер

Описание: Пакет com.sun.image.codec.jpeg был добавлен в JDK 1.2 (декабрь 1998 года) в качестве нестандартным способом контроля загрузки и сохранения файлов изображений в формате JPEG. Этот пакет никогда не был частью спецификации платформы и был удален из выпуска Java SE 7. API Java I/O API был добавлен в версию JDK 1.4 в качестве стандартного API и устранил необходимость в пакете com.sun.image.codec.jpeg.

+0

Да, к сожалению, чтение JPEG с ImageIO намного медленнее –

+9

ImageIO не работает с CMYK-JPEG. – AvrDragon

+8

Это только вариант, если вы составляете свой собственный код. Это не всегда так. Никто не хочет идти и переписывать программу только для ее компиляции. Правильный ответ - @mainzelM (чуть ниже в момент написания). – mjaggard

1

Какой JDK вы используете? Я думаю, что этот пакет не является обязательным требованием и будет доступен только в JDK Sun. This discussion объясняет.

Возможно, вы сможете загрузить файл jar и включить его в свой файл пути отдельно, если вы действительно хотите его использовать.

По docs:

Обратите внимание, что классы в пакете com.sun.image.codec.jpeg не являются частью ядра Java API. Они входят в состав JDK Sun и JRE. Хотя другие лицензиаты могут выбирать для распространения этих классов, разработчики не могут зависеть от их доступности в реализациях, отличных от Sun. Мы ожидаем, что эквивалентная функциональность в конечном итоге будет доступна в базовом API или стандартном расширении.

1

Похоже, вы используете что-то, что было заменено. Может быть, вы на Java 7?

Here - это то, что, кажется, описывает это, и где искать подходящую замену.

49

У меня была эта проблема при компиляции с JDK 7. Достаточно странно Eclipse не показывал эту ошибку, только javac сделал. Ответ можно найти in this Stackoverflow answer: javac использует специальную таблицу символов, которая не включает все классы, принадлежащие Sun, и запрос -XDignore.symbol.file заставляет проблему уйти.

Конечно, гораздо лучшим решением является переписать код без использования собственных классов, но для быстрой поддержки JDK 7 эта опция работает.

+6

С Maven: используйте версию 3.1 maven-compiler-plugin, а затем -XDignore.symbol.file ATorras

+0

Вы можете использовать ' -XDignore.symbol.file' так же успешно, не обновляя maven-compiler-plugin – Dzmitry

+0

@mainze Как добавить это через командную строку? Мне нужно применить его для моего веб-приложения, развернутого в tomcat под linux –

Смежные вопросы