Olá pessoal, blz aew ?
Bem, estou fazendo um trabalho pra matéria de Processamento Digital de Imagens … o professor mandou a gente fazer uma aplicação que abra uma imagem e que realize escala de cinza nela … entao, até ai tudo bem … eu tava programando tranquilo, compilava, o programa executava normalmente … fazia escala de cinza e tudo mais … ate ai blz … ai de repente ele parou de funcionar … vou explicar melhor: Tenho varias classes … mas vou colocar as duas que estão doidas :lol: : a classe Janela e PanelImagem … e as duas estao “conectadas” entre elas …
A classe Janela exibe a janela principal do programa e a classe PanelImagem faz com que a imagem seja exibida no programa. E mais uma coisa: a classe Janela nao tem main, pois está instanciada em uma outra classe ok ? 
Nao vou colocar o codigo inteiro, pois é muito grande. Entao, eu tirei a parte dos metodos das açoes de alguns jmenu ok ?
O problema está la no comentario que deixei … olhem la e me ajudem!
A classe Janela:
package janela;
import procImagem.BotaoProc;
import javax.media.jai.JAI;
import javax.media.jai.PlanarImage;
import javax.swing.*;
import javax.swing.border.TitledBorder;
import abrir.ImageFilter;
import abrir.ImagePreview;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;
import java.io.File;
import java.net.URL;
import login.LoginMain;
public class Janela extends JFrame {
private static final long serialVersionUID = 1L;
private JFileChooser fc;
private PanelImagem panimg;
static JProgressBar progressBar;
private String img = "";
private PlanarImage pi = JAI.create("fileload", img);
BotaoProc c = new BotaoProc(img, pi);
JLabel p = new JLabel();
public Janela() {
setTitle("Aplicação Exemplo");
JMenu arquivo = new JMenu("Arquivo");
arquivo.setIcon(new ImageIcon("Imagens/sobre.png"));
JMenuItem novo = new JMenuItem("Novo 'n'");
novo.setMnemonic('n');
JMenuItem abrir = new JMenuItem("Abrir 'a'");
abrir.setMnemonic('a');
abrir.setIcon(new ImageIcon("Imagens/fileopen.png"));
abrir.addActionListener(
new ActionListener() {
public void actionPerformed(ActionEvent event) {
if (fc == null) {
fc = new JFileChooser();
//Adiciona um filtro de arquivos próprio(Apenas Imagens) e desabilita
//o padrão (Aceitar Todos os arquivos)
fc.addChoosableFileFilter(new ImageFilter());
fc.setAcceptAllFileFilterUsed(false);
//Adiciona ícones padrão para diferentes tipos de arquivos(JPEG,GIF..).
// filechooser.setFileView(new ImageFileView());
//Adiciona a janela de preview(visualização de imagem).
fc.setAccessory(new ImagePreview(fc));
}
int returnVal = fc.showDialog(Janela.this,"Abrir");
if (returnVal == JFileChooser.APPROVE_OPTION) {
File file = fc.getSelectedFile();
panimg.setImagem(file.getAbsolutePath());
p.setIcon(panimg.getLayout());
p.setPreferredSize(new Dimension(680,680));
p.repaint(); //atualiza o JLabel com a imagem selecionada
if(file != null) {
PlanarImage pi2= JAI.create("fileload",file.getAbsolutePath());
c.setImagem(pi2,file.getAbsolutePath());
}
}
fc.setSelectedFile(null);
}
}
);
JMenuItem salvarim = new JMenuItem("Salvar imagem 'k'");
salvarim.setMnemonic('k');
salvarim.setIcon(new ImageIcon("Imagens/filesave.png"));
JMenuItem logoff = new JMenuItem("Logoff 'l'");
logoff.setMnemonic('i');
logoff.setIcon(new ImageIcon("Imagens/logoff.jpg"));
JMenuItem sair = new JMenuItem("Sair");
sair.setMnemonic('i');
sair.setIcon(new ImageIcon("Imagens/exit.png"));
JMenu ajuda = new JMenu("Help");
JMenuItem sobre = new JMenuItem("Sobre 'o'");
sobre.setMnemonic('o');
sobre.setIcon(new ImageIcon("Imagens/info.png"));
ajuda.add(sobre);
arquivo.add(novo);
arquivo.add(abrir);
arquivo.add(salvarim);
arquivo.addSeparator();
arquivo.add(logoff);
arquivo.addSeparator();
arquivo.add(sair);
JMenuBar menu = new JMenuBar();
setJMenuBar(menu);
menu.add(arquivo);
menu.add(ajuda);
Informacoes c1 = new Informacoes();
Observacoes c2 = new Observacoes();
BotaoProc bp = new BotaoProc(img, pi);
JPanel painelCentral = new JPanel(new BorderLayout());
JPanel painelInferior = new JPanel(new FlowLayout());
TitledBorder tituloImagem;
tituloImagem = BorderFactory.createTitledBorder("Imagem");
JTabbedPane tabs = new JTabbedPane();
panimg = new PanelImagem(img); //O PROBLEMA ESTÁ AQUI!
panimg.setImagem(img); //AQUI TAMBEM
p.setIcon(panimg.getLayout()); // AQUI A MESMA COISA
p.setPreferredSize(new Dimension(680, 680));
JPanel painelImagem = new JPanel();
painelImagem.setPreferredSize(new Dimension(200, 200));
painelImagem.setBorder(tituloImagem);
painelImagem.add(p);
painelCentral.add(painelImagem,BorderLayout.CENTER);
painelCentral.add(painelInferior,BorderLayout.SOUTH);
TitledBorder tituloBot;
tituloBot = BorderFactory.createTitledBorder("Processamento de Imagens");
JPanel painelBotao = new JPanel();
painelBotao.setPreferredSize(new Dimension(250, 200));
painelBotao.setBorder(tituloBot);
painelBotao.add(bp.getLayout());
painelInferior.add(painelBotao);
TitledBorder tituloInf;
tituloInf = BorderFactory.createTitledBorder("Informações");
JPanel painelInformacoes = new JPanel();
painelInformacoes.setPreferredSize(new Dimension(300, 200));
painelInformacoes.setBorder(tituloInf);
painelInformacoes.add(c1.getLayout());
painelInferior.add(painelInformacoes);
JPanel painelObservacoes = new JPanel();
painelObservacoes.add(c2.getLayout());
tabs.addTab("Aba 1", painelCentral);
JPanel pa = new JPanel();
JLabel la = new JLabel("teste");
pa.add(la);
tabs.addTab("Aba 2", pa);
tabs.addTab("Relatório", painelObservacoes);
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
SwingUtilities.updateComponentTreeUI(this);
}
catch (Exception e) {
System.out.println("Erro de Interface");
}
addWindowListener(
new WindowListener() {
public void windowClosing(WindowEvent e) {
Object[] opts = {"Sim", "Não"};
int op;
op = JOptionPane.showOptionDialog(null, "Deseja sair do aplicativo ?", "Processamento de Imagens",
JOptionPane.DEFAULT_OPTION, JOptionPane.WARNING_MESSAGE, null, opts, opts[0]);
if (op == 0)
System.exit(0);
}
public void windowActivated(WindowEvent e) { }
public void windowClosed(WindowEvent e) { }
public void windowDeactivated(WindowEvent e) { }
public void windowDeiconified(WindowEvent e) { }
public void windowIconified(WindowEvent e) { }
public void windowOpened(WindowEvent e) { }
}
);
getContentPane().add(tabs);
setLocationRelativeTo(null);
setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
this.setExtendedState(JFrame.MAXIMIZED_BOTH);
}
public void visivel() {
this.setVisible(true);
}
}
Agora a classe PanelImagem
package janela;
import java.awt.Dimension;
import java.awt.Image;
import java.awt.image.BufferedImage;
import javax.media.jai.JAI;
import javax.media.jai.PlanarImage;
import javax.swing.ImageIcon;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import com.sun.media.jai.widget.DisplayJAI;
public class PanelImagem {
JScrollPane spane = new JScrollPane();
private JLabel limagem = new JLabel();
private PlanarImage principal;
private DisplayJAI dj;
ImageIcon icon;
BufferedImage b;
public PanelImagem(String imagem) {
principal = JAI.create("fileload",imagem);
dj = new DisplayJAI(principal); //PROBLEMA AQUI!!!
dj.setPreferredSize(new Dimension(660, 660));
JPanel p = new JPanel();
p.add(dj);
limagem.add(dj);
icon = new ImageIcon(imagem);
icon = ajustaTam(icon);
}
public ImageIcon getLayout() {
return icon;
}
public DisplayJAI setImagem(String img) {
PlanarImage aux = JAI.create("fileload",img);
b = aux.getAsBufferedImage();
icon = new ImageIcon(img);
icon = ajustaTam(icon);
principal = aux;
aux.dispose();
dj.setPreferredSize(new Dimension(800, 800));
dj.set(principal);
dj.getHeight();
return dj;
}
public ImageIcon ajustaTam(ImageIcon imagem){
ImageIcon novaImagem = null;
int flag=0;
if(imagem.getIconHeight() < imagem.getIconWidth()){
flag=1;
}
else
if(imagem.getIconHeight() >= imagem.getIconWidth()){
flag=2;
}
switch(flag) {
case 0:
novaImagem = new ImageIcon(imagem.getImage());
break;
case 1:
if(imagem.getIconWidth() > 660)
{
System.out.println("maior altura");
float y = (float) imagem.getIconWidth()/660;
System.out.println(y+"="+imagem.getIconWidth()+"/ 660");
float x = (float) imagem.getIconHeight()/y;
System.out.println(x+"="+imagem.getIconHeight()+"/"+y);
System.out.println("\n resultado:"+y+"tamanho x 660"+",y"+x);
novaImagem = new ImageIcon(
imagem.getImage().getScaledInstance(660,(int) x,Image.SCALE_DEFAULT)
);
}
else
novaImagem = new ImageIcon(imagem.getImage());
break;
case 2:
if(imagem.getIconHeight() > 660)
{
System.out.println("maior altura");
float y = (float) imagem.getIconHeight()/660;
System.out.println(y+"="+imagem.getIconHeight()+"/ 660");
float x =(float) imagem.getIconWidth()/y;
System.out.println(x+"="+imagem.getIconWidth()+"/"+y);
System.out.println("\n resultado:"+y+"tamanho x"+x+",y 660");
novaImagem=new ImageIcon(
imagem.getImage().getScaledInstance((int) x,660,Image.SCALE_DEFAULT)
);
}
else
novaImagem = new ImageIcon(imagem.getImage());
break;
}
return novaImagem;
}
public ImageIcon getPlanarImage() {
return icon;
}
}