2009-12-15 12 views
28

Ho un programma Java quando ho compilarlo ottengo il seguente erroreimport 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]^

cosa posso fare?

Qual è il modo corretto di scrivere un file immagine ora che il pacchetto com.sun è deprecato.

risposta

26

Perché stai utilizzando le classi nel pacchetto com.sun.image.codec.jpeg? Non si suppone di utilizzare direttamente queste classi: Why Developers Should Not Write Programs That Call 'sun' Packages.

Cosa fa il programma? Prova solo a leggere o scrivere un'immagine JPG? È molto semplice con l'API ImageIO. Vedi questo tutorial: Writing/Saving an Image.

Aggiunta - Il pacchetto com.sun.image.codec.jpeg è stato rimosso in Java 7 come indicato nel Java SE 7 and JDK 7 Compatibility Guide.

Sinossi: non standard com.sun.image.codec.jpeg pacchetto è in pensione

Descrizione: Il pacchetto com.sun.image.codec.jpeg è stata aggiunta in JDK 1.2 (dicembre 1998) come un modo non-standard di controllare il caricamento e il salvataggio di file di immagine in formato JPEG. Questo pacchetto non faceva mai parte delle specifiche della piattaforma ed è stato rimosso dalla versione di Java SE 7. L'API Java Image I/O è stata aggiunta alla versione 1.4 di JDK come API standard ed è stata eliminata la necessità del pacchetto com.sun.image.codec.jpeg.

+0

Sì, sfortunatamente, la lettura di un file JPEG con ImageIO è molto più lenta. –

+9

ImageIO non funziona con CMYK-JPEG. – AvrDragon

+8

Questa è solo un'opzione se stai compilando il tuo codice. Questo non è sempre vero. Nessuno vuole andare a riscrivere un programma solo per compilarlo. La risposta corretta è di @mainzelM (appena sotto al momento della scrittura). – mjaggard

1

Quale JDK stai utilizzando? Penso che questo pacchetto non sia un requisito e sarà disponibile solo in JDK di Sun. This discussion spiega.

Potrebbe essere possibile scaricare il file jar e includerlo nel file del percorso separatamente se si desidera utilizzarlo.

Secondo docs:

noti che le classi nel pacchetto com.sun.image.codec.jpeg non fanno parte del nucleo API Java. Fanno parte delle distribuzioni JDK e JRE di Sun. Sebbene altri licenziatari possano scegliere di distribuire queste classi, gli sviluppatori non possono dipendere dalla loro disponibilità in implementazioni non Sun. Prevediamo che alla fine sarà disponibile una funzionalità equivalente in un'API principale o un'estensione standard.

1

Sembra che tu stia usando qualcosa che è stato sostituito. Forse sei su Java 7?

Here è qualcosa che sembra descrivere questo, e dove andare a trovare la giusta sostituzione.

49

Ho avuto questo problema durante la compilazione con JDK 7. Stranamente Eclipse non ha mostrato questo errore, solo javac lo ha fatto. La risposta può essere trovata in this Stackoverflow answer: javac utilizza una speciale tabella dei simboli che non include tutte le classi proprietarie di Sun e l'approvvigionamento di -XDignore.symbol.file fa scomparire il problema.

Ovviamente, una soluzione molto migliore è riscrivere il codice senza utilizzare le classi proprietarie, ma per supportare rapidamente JDK 7, questa opzione funziona.

+6

Con Maven: Usa la versione 3.1 di maven-compiler-plugin e quindi -XDignore.symbol.file ATorras

+0

Puoi usare ' -XDignore.symbol.file' con la stessa facilità senza dover aggiornare maven-compiler-plugin – Dzmitry

+0

@mainze Come aggiungere questo attraverso il prompt dei comandi? ho bisogno di applicarlo per la mia applicazione web distribuito in tomcat sotto linux –