I'm trying to pass an old code to an MVC standard, but by modifying the methods and creating the new Zoom class, I'm encountering this flaw in the console:
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at CONTROL.CAplicativo.controlaZoom(CAplicativo.java:202)
at CONTROL.CAplicativo.actionPerformed(CAplicativo.java:133)
at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
at java.awt.Component.processMouseEvent(Unknown Source)
at javax.swing.JComponent.processMouseEvent(Unknown Source)
at java.awt.Component.processEvent(Unknown Source)
at java.awt.Container.processEvent(Unknown Source)
at java.awt.Component.dispatchEventImpl(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Window.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
at java.awt.EventQueue.access$500(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue$4.run(Unknown Source)
at java.awt.EventQueue$4.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)
My class is
package CONTROL;
import java.awt.*;
import java.awt.event.*;
import MODEL.Zoom;
import VIEW.*;
import CONTROL.CImagem;
public class CAplicativo implements ActionListener {
private MPInicial pnCenario;
private Graphics desenhoCen, desenhoDir;
private CImagem controleImagem;
private Zoom ImagemZoom;
private String nomeArquivoImagemDada;
private char[][] imagemCinza;
private char[][] imagemAtual;
private int nLinImageAtual, nColImageAtual;
private int nLinImageInic, nColImageInic;
private boolean estadoDesenho;
// **************************************************************************
public CAplicativo() {
pnCenario = new MPInicial(this);
pnCenario.showPanel();
estadoDesenho = false;
}
// **************************************************************************
// METODO PARA CONTROLE DOS BOTOES DO APLICATIVO
public void actionPerformed(ActionEvent e)
{
String comando, nomeArquivo;
comando = e.getActionCommand();
// DEFINE AMBIENTE GRAFICO
if (!estadoDesenho) {
pnCenario.iniciarGraphics();
desenhoCen = pnCenario.getDesenhoC();
desenhoDir = pnCenario.getDesenhoD();
}
// ENDS THE PROGRAM
if (comando.equals("botaoFim")) {
System.exit(0);
}
// INICIA O PROGRAMA
if (comando.equals("botaoImagem")) {
// LE IMAGEM SOLICITADA
nomeArquivoImagemDada = pnCenario.escolherArquivo(1);
if (nomeArquivoImagemDada != null) {
controleImagem = new CImagem(nomeArquivoImagemDada, desenhoCen);
estadoDesenho = true;
imagemCinza = controleImagem.getImagemCinza();
nLinImageInic = controleImagem.getNLin();
nColImageInic = controleImagem.getNCol();
pnCenario.mudarBotoes();
pnCenario.limpaPainelDir(desenhoDir);
controleImagem.mostrarImagemMatriz(imagemCinza, nLinImageInic,
nColImageInic, desenhoDir);
nLinImageAtual = nLinImageInic;
nColImageAtual = nColImageInic;
imagemAtual = controleImagem.copiarImagem(imagemCinza,
nLinImageInic, nColImageInic);
}
}
// CHAMANDO OS BOTOES DE CONTROLE DE FILTRAGEM DA IMAGEM
// (CRIADO PELA EQUIPE)
if (comando.equals("botaoFiltro") && estadoDesenho) {
int mascara = 0;
// flag para controlar qual metodo de filtragem sera usado
if (pnCenario.getBotaoHorizontal() == 2) {
mascara = 1;
}
if (pnCenario.getBotaoVertical() == 2) {
mascara = 2;
}
if (pnCenario.getBotaoAmbos() == 2) {
mascara = 3;
}
controlaFiltro(mascara); // chamada do método controlaFiltro.
// Mascara indica qual metodo de filtragem sera usado
}
// CHAMANDO OS BOTOES DE CONTROLE DE ZOOM (CRIADO PELA EQUIPE)
if (comando.equals("botaoZoom") && estadoDesenho) {
int auxZoom = 0; // flag para controlar qual tamanho
// de zoom foi escolhido
if(pnCenario.getBotaoZoomIn25() == 2){
auxZoom = 25;
}
if(pnCenario.getBotaoZoomIn50() == 2){
auxZoom = 50;
}
if (pnCenario.getBotaoZoomIn75() == 2) {
auxZoom = 75;
}
if(pnCenario.getBotaoZoomIn100() == 2){
auxZoom = 100;
}
if (pnCenario.getBotaoZoomOut25() == 2){
auxZoom = -25;
}
if(pnCenario.getBotaoZoomOut50() == 2){
auxZoom = -50;
}
if(pnCenario.getBotaoZoomOut75() == 2){
auxZoom = -75;
}
controlaZoom(auxZoom); // chamada do método controlaZoom.
// Mascara indica qual tamanho de zoom sera usado
}
if (comando.equals("botaoSalva") && estadoDesenho) {
nomeArquivo = pnCenario.escolherArquivo(2);
controleImagem.gravarImagem(nomeArquivo, imagemAtual,
nLinImageAtual, nColImageAtual);
}
if (comando.equals("botaoReset") && estadoDesenho) {
pnCenario.limpaPainelCen(desenhoCen);
controleImagem = new CImagem(nomeArquivoImagemDada,
desenhoCen);
nLinImageAtual = nLinImageInic;
nColImageAtual = nColImageInic;
imagemAtual = controleImagem.copiarImagem(imagemCinza,
nLinImageInic, nColImageInic);
pnCenario.limpaPainelDir(desenhoDir);
controleImagem.mostrarImagemMatriz(imagemAtual, nLinImageAtual,
nColImageAtual, desenhoDir);
pnCenario.ativarPainelAcao1();
pnCenario.resetaSistema();
}
}
// **************************************************************************
// METODO PARA CONTROLAR A VISUALIZACAO DAS IMAGENS FILTRADAS
// (CRIADO PELA EQUIPE)
private void controlaFiltro(int mascara){
if(pnCenario.getTipoVisualImage() == 2){
char[][] temp = new char[nLinImageAtual][nColImageAtual];
temp = controleImagem.copiarImagem(imagemAtual,
nLinImageAtual, nColImageAtual);
// variavel temporaria criada para armazenar valor da imagem atual
imagemAtual = controleImagem.aplicaCanny(imagemAtual,
nLinImageAtual, nColImageAtual, mascara);
pnCenario.limpaPainelCen(desenhoCen);
controleImagem.mostrarImagemMatriz(temp, nLinImageAtual,
nColImageAtual, desenhoCen);
pnCenario.limpaPainelDir(desenhoDir);
}
if (pnCenario.getNewImage() == 2)
imagemAtual = controleImagem.aplicaCanny(imagemAtual,
nLinImageAtual, nColImageAtual, mascara);
controleImagem.mostrarImagemMatriz(imagemAtual,
nLinImageAtual, nColImageAtual, desenhoDir);
}
// **************************************************************************
// METODO PARA CONTROLAR VISUALIZACAO DAS IMAGENS AMPLIADAS OU DIMINUIDAS
// (CRIADO PELA EQUIPE)
private void controlaZoom(int auxZoom) {
if(pnCenario.getTipoVisualImage() == 2){
char[][] temp = new char[nLinImageAtual][nColImageAtual];
// variavel temporaria criada para armazenar valor da imagem atual
temp = ImagemZoom.copiarImagem(imagemAtual, nLinImageAtual,
nColImageAtual);
imagemAtual = ImagemZoom.aplicaZoom(imagemAtual,
nLinImageAtual, nColImageAtual, auxZoom);
pnCenario.limpaPainelCen(desenhoCen);
controleImagem.mostrarImagemMatriz(temp, nLinImageAtual,
nColImageAtual, desenhoCen);
pnCenario.limpaPainelDir(desenhoDir);
}
if (pnCenario.getNewImage() == 2)
imagemAtual = ImagemZoom.aplicaZoom(imagemAtual,
nLinImageAtual, nColImageAtual, auxZoom);
nLinImageAtual = controleImagem.getNLin();
nColImageAtual = controleImagem.getNCol();
pnCenario.limpaPainelDir(desenhoDir);
controleImagem.mostrarImagemMatriz(imagemAtual,
nLinImageAtual, nColImageAtual, desenhoDir);
}
// **************************************************************************
}