Olá, estou desenvolvendo um projeto de pesquisa,
mas estou com seguinte problema.
Tenho que criar uma classe chamada UniImage que Extends Image,
tudo bem, a classe é extendida normalmente,mas na hora da criação de imagem, da-se um erro no tookit. :roll:
Exception in thread "main" java.lang.ClassCastException: sun.awt.image.ToolkitImage cannot be cast to br.unisul.juni.componentes.UniImage
at br.unisul.juni.componentes.Teste.main(Teste.java:15)
O Toolkit retorna objetos do tipo BufferedImage, não UniImage. Por isso você não pode fazer o cast.
Crie um construtor na sua classe que converta um para o outro, então chame assim:
Aliás, pq vc precisa de uma classe nova, filha de Image? Tem certeza que isso está certo?
Outra coisa, a Sun tem recomendado o uso da classe ImageIO para carregar imagens. Dê uma olhada no método read, dessa classe.
A
apokalypsi
importjava.awt.*;importjava.awt.image.BufferedImage;importjava.awt.image.ImageObserver;importjava.awt.image.ImageProducer;importjava.io.File;importjava.io.IOException;importjavax.imageio.ImageIO;/** * A classe abstrata Image é a superclasse de todas as classes que representam imagens gráficas. * A imagem deve ser obtida em uma plataforma de modo específico. * @author Diego Batista Pereira da Silva * @since 27_08_2008 */publicabstractclassUniImageextendsImage{/** * O (pseudo-)método construtor determina que ações devem ser executadas quando da criação de um objeto. * Em Java, o construtor é definido como um método cujo nome deve ser o mesmo nome da classe e sem indicação do tipo de retorno -- nem mesmo void. * O construtor é unicamente invocado no momento da criação do objeto através do operador new. */publicUniImage(){super();// TODO Auto-generated constructor stub}/** * @author Diego Batista Pereira da Silva * @param image * @return Retorna a largura da Image * Determina o tamanho da imagem. * Se a largura ainda não é conhecido, este método retorna -1 e as especificadas ImageObserver objeto é notificado posteriormente. */publicintgetLargura(ImageObserverobserver){returngetWidth(observer);}/** * @author Diego Batista Pereira da Silva * @param image * @return * Determina a altura da imagem. * Se a altura ainda não é conhecido, este método retorna -1 e as especificadas ImageObserver objeto é notificado posteriormente. */publicintgetAltura(ImageObserverobserver){returngetHeight(observer);}/** * @author Diego Batista Pereira da Silva * @return * Recebe o objeto que produz os pixels para a imagem. * Este método é chamado pela imagem de filtragem e de classes através de métodos que executar imagem conversão e escamação. */publicImageProducergetFiltragem(){returngetSource();}/** * @author Diego Batista Pereira da Silva * @return * Cria um contexto para desenho gráfico para fora da tela uma imagem. * Este método só pode ser chamado para fora da tela imagens. */publicGraphicsgetContexto(){returngetGraphics();}/** * @author Diego Batista Pereira da Silva * @param nome * @param observer * @return *Obtém uma propriedade desta imagem por nome. *Propriedade individual nomes são definidos pelos diferentes formatos imagem. *Se uma propriedade não é definida para uma determinada imagem, este método retorna UndefinedProperty o objeto. *Se as propriedades para esta imagem não são ainda conhecidos, este método retorna nulo, e os ImageObserver objeto é notificado posteriormente. *O nome da propriedade "comentário" deve ser usado para armazenar um comentário opcionais que podem ser apresentados ao pedido como uma descrição da imagem, sua origem, ou o seu autor. */publicObjectgetPropriedade(Stringnome,ImageObserverobserver){returngetProperty(nome,observer);}/** * @author Diego Batista Pereira da Silva * @param largura * @param altura * @param dica * @return * Cria um escalados versão desta imagem. * Uma nova imagem objeto é devolvido o que tornará a imagem na largura e altura especificados pelo padrão. * A nova imagem objeto pode ser carregado asynchronously mesmo se a fonte original imagem já foi completamente carregado. * Se largura ou altura é um número negativo é substituído então um valor de manter a taxa de aspecto da imagem original dimensões. * Se ambos largura e altura são negativas e, em seguida, a imagem original dimensões são usadas. */publicImagenovasEscalas(intlargura,intaltura,intdica){returnsuper.getScaledInstance(largura,altura,dica);}/** * @author Diego Batista Pereira da Silva * Rubores todos os recursos sejam utilizados por esta imagem objeto. * Isto inclui qualquer pixel que está a ser dados em cache para renderização para a tela, bem como qualquer sistema de recursos que estão sendo usadas para armazenar dados ou pixels para a imagem. * A imagem está a redefinir a um estado semelhante ao primeiro, quando foi criada a fim de que se for novamente prestados, os dados da imagem terá de ser recriada ou trazida de novo a partir de sua fonte. * Este método sempre deixa a imagem em um estado tal que ela pode ser reconstruído. * Isso significa que o método aplica-se apenas ao cache secundário ou outras representações de imagens como aquelas que tenham sido produzidos a partir de uma ImageProducer (ler um arquivo, por exemplo). * Ele não faz nada para fora da tela imagens que têm apenas uma cópia dos seus dados. */publicvoidrecursos(){super.flush();}/** * @author Diego Batista Pereira da Silva * @param gc - Um valor nulo para esse parâmetro irá resultar na obtenção das capacidades para a imagem padrão GraphicsConfiguration. * @return - um objeto que contém as capacidades deste Imagem em GraphicsConfiguration especificado. * Retorna um objeto que pode ser ImageCapabilities perguntou como para as capacidades da imagem sobre a GraphicsConfiguration especificado. * Isto permite que programadores para saber mais informações sobre o tempo de execução específica Image objeto que eles próprios criaram. * Por exemplo, o usuário poderá criar uma BufferedImage mas o sistema pode não ter memória de vídeo à esquerda para criar uma imagem do que sobre a dimensão dada GraphicsConfiguration, de forma muito embora o objeto pode ser acceleratable, em geral, é que não tem essa capacidade em GraphicsConfiguration . */publicImageCapabilitiesgetCapacidade(GraphicsConfigurationgc){returnsuper.getCapabilities(gc);}/** * @author Diego Batista Pereira da Silva * @param prioridade - um valor entre 0 e 1, inclusiva, onde valores mais altos indicam maior importância para a aceleração. * Um valor 0 significa que esta imagem nunca deveria ser acelerado. * Outros valores são utilizados apenas para determinar a aceleração prioridade em relação aos de outras imagens. * Define uma dica para esta imagem de como é importante aceleração. * Esta prioridade dica é utilizado para comparar com as prioridades de outros objetos gráficos para determinar o modo de utilização dos recursos escassos, como a aceleração de memória de vídeo. * Quando e se for possível para acelerar esta imagem, se houver recursos disponíveis não são suficientes para proporcionar suficiente, mas que a aceleração pode ser libertado por alguns outros aceleração de-imagem de menor prioridade e, em seguida, outras imagens que podem ser de-acelerou em deferência a este. * As imagens que têm o mesmo ter prioridade sobre os recursos de um primeiro a chegar, primeiro a ser servido ". */publicvoidsetPrioridade(floatprioridade){super.setAccelerationPriority(prioridade);}/** * @author Diego Batista Pereira da Silva * @return - valor entre 0 e 1, que representa o valor atual da prioridade * Retorna o valor atual da aceleração prioridade dica. */publicfloatgetPrioridade(){returnsuper.getAccelerationPriority();}/* * Campo Síntese */protectedfloatacelerarPrioridade(){returnaccelerationPriority;}}
Esta é a classe mais não da para usa
UniImage displayImage = new UniImage(Toolkit.getDefaultToolkit().getImage("Image/joker.jpg"));
Alguem sabe pq?
ViniGodoy
Para que você está criando essa classe? Ao meu ver, ela não está agregando nenhuma funcionalidade ao seu sistema.
Para falar a verdade, ela só está complicando. Você adicionou métodos em português e vai acabar com uma classe que mistura as duas linguas. Esses métodos nada mais fazem do que chamar outros métodos idênticos diretamente. Você ainda terá preocupações com casts, deverá implementar a funcionalidade de um Image especifico e terá que fazer métodos de conversão.