Criação de Uma Classe Filha de image

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:

UniImage displayImage = (UniImage) Toolkit.getDefaultToolkit().getImage("Image/joker.jpg");

displayImage.getWidth(null);
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)

Isso aew … :smiley:

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.

[code]
import java.awt.*;
import java.awt.image.BufferedImage;
import java.awt.image.ImageObserver;
import java.awt.image.ImageProducer;
import java.io.File;
import java.io.IOException;

import javax.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
    */

public abstract class UniImage extends Image{
/**
* 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.
/
public UniImage() {
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.
*/
public int getLargura(ImageObserver observer){
return getWidth(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. 
 */
public int getAltura(ImageObserver observer){
	return getHeight(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.
 */
public ImageProducer getFiltragem(){
	return getSource();	
}
/**
 * @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. 
 */
public Graphics getContexto(){
	return getGraphics();	
}
/**
 * @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.
 */
public Object getPropriedade(String nome, ImageObserver observer){
	return getProperty(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.
 */
public Image novasEscalas(int largura,int altura, int dica){
	return super.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. 
 */
public void recursos(){
	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 . 
 */
public ImageCapabilities getCapacidade(GraphicsConfiguration gc){
	return super.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 ". 
 */
public void setPrioridade(float prioridade){
	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. 
 */
public float getPrioridade(){
	return super.getAccelerationPriority();
}

/*
 * Campo Síntese 
 */
protected float acelerarPrioridade(){
	return accelerationPriority;	
}

}[/code]

Esta é a classe mais não da para usa

UniImage displayImage = new UniImage(Toolkit.getDefaultToolkit().getImage("Image/joker.jpg")); Alguem sabe pq?

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.

Muito melhor é você usar a classe BufferedImage diretamente. Dá uma olhada nesse site, que mostra como fazer isso:
http://java.sun.com/j2se/1.5.0/docs/guide/2d/spec/j2d-image.html#wp65661

Aliás, você ainda não pode dar aquele comando pq não definiu um construtor que recebe uma Image.