Ayuda por favor, no corre el programa!!!!!!!

Betsa23
08 de Marzo del 2008
Hola a todos:
Mi problema es que en la escuela me dejaron ver un código (obviamente en Java) y me piden que corra, pero por más que he estado checando el código, me sale un error, por favoooooooor!!!!!! ayundenme donde esta este error, ya no se que hacer, solo se me ocurrio recurrir a ustedes.

Por cierto, este codigo lo corrí en el NetBeans IDE 3.5.1

El codigo es el siguiente:

import java.awt.*;
import java.awt.event.*;
import java.util.*;
import javax.swing.*;
import javax.swing.filechooser.*;
import java.io.*;
import java.awt.image.*;
import java.awt.Image;


public class Prueba9_1 {
public static void main(String args[]) {
try {
//UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");
//UIManager.setLookAndFeel("com.sun.java.swing.plaf.motif.MotifLookAndFeel");
UIManager.setLookAndFeel("javax.swing.plaf.metal.MetalLookAndFeel");
} catch(Exception e) { System.out.println("error"); }

JFrame frame=new VentanaPrincipal("Prueba9_1_FILTROS");
frame.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent evt){
System.exit(0); } });
frame.setSize(700,500);
frame.setVisible(true);
}
}

class VentanaPrincipal extends JFrame{
MenuVentana menu;
Image img;
Pestanas pestana;
ImagenPanel panel;
ImagenPanel2 panel2;
int fw, fh, iw, ih=0;

VentanaPrincipal(String t){
super.setTitle(t);
pestana=new Pestanas();
panel=new ImagenPanel();
panel2=new ImagenPanel2();
pestana.panelActual(panel);
pestana.panelFiltro(panel2);
menu = new MenuVentana(this, panel, panel2);
setJMenuBar(menu.putMenu());
getContentPane().add(pestana.putPestana(), BorderLayout.CENTER);
}

public void paint(Graphics g) {
super.paint(g);
System.out.println("paint frame");
}
}

class MenuVentana {
JMenuBar menu = new JMenuBar();
VentanaPrincipal frame;
Eventos e;

MenuVentana(VentanaPrincipal f, ImagenPanel panel, ImagenPanel2 panel2){
frame=f;
e = new Eventos(frame,panel,panel2);

JMenu mArchivo = new JMenu("Archivo");
JMenuItem mArchivoAbrir =new JMenuItem("Abrir");
mArchivoAbrir.addActionListener(e);
JMenuItem mArchivoGuardar =new JMenuItem("Guardar");
mArchivoGuardar.addActionListener(e);
JMenuItem mArchivoCerrar =new JMenuItem("Cerrar");
mArchivoCerrar.addActionListener(e);
JMenuItem mArchivoSalir =new JMenuItem("Salir");
mArchivoSalir.addActionListener(e);
mArchivo.add(mArchivoAbrir);
mArchivo.add(mArchivoGuardar);
mArchivo.add(mArchivoCerrar);
mArchivo.add(new JSeparator());
mArchivo.add(mArchivoSalir);
menu.add(mArchivo);

JMenu mFiltros = new JMenu("Filtros");
JMenuItem mFiltrosOmnidir = new JMenuItem("Omnidir");
mFiltrosOmnidir.addActionListener(e);
JMenuItem mFiltrosBorde = new JMenuItem("Borde");
mFiltrosBorde.addActionListener(e);
JMenuItem mFiltrosGradiente = new JMenuItem("Gradiente");
mFiltrosGradiente.addActionListener(e);
JMenuItem mFiltrosBinomial = new JMenuItem("Binomial");
mFiltrosBinomial.addActionListener(e);
JMenuItem mFiltrosPasoBajas = new JMenuItem("PasoBajas");
mFiltrosPasoBajas.addActionListener(e);
JMenuItem mFiltrosPasoAltas = new JMenuItem("PasoAltas");
mFiltrosPasoAltas.addActionListener(e);
JMenuItem mFiltrosGris =new JMenuItem("Gris");
mFiltrosGris.addActionListener(e);
JMenuItem mFiltrosMediana =new JMenuItem("Mediana");
mFiltrosMediana.addActionListener(e);
JMenuItem mFiltrosInvertir =new JMenuItem("Invertir");
mFiltrosInvertir.addActionListener(e);
JMenuItem mFiltrosErosion =new JMenuItem("Erosion");
mFiltrosErosion.addActionListener(e);
JMenuItem mFiltrosDilatacion =new JMenuItem("Dilatacion");
mFiltrosDilatacion.addActionListener(e);
JMenuItem mFiltrosOpening =new JMenuItem("Opening");
mFiltrosOpening.addActionListener(e);
JMenuItem mFiltrosClosing =new JMenuItem("Closing");
mFiltrosClosing.addActionListener(e);
JMenuItem mFiltrosEscalar =new JMenuItem("Escalar");
mFiltrosEscalar.addActionListener(e);
JMenuItem mFiltrosUmbral =new JMenuItem("Umbral");
mFiltrosUmbral.addActionListener(e);
JMenuItem mFiltrosHistograma =new JMenuItem("Histograma");
mFiltrosHistograma.addActionListener(e);
mFiltros.add(mFiltrosOmnidir);
mFiltros.add(mFiltrosBorde);
mFiltros.add(mFiltrosGradiente);
mFiltros.add(mFiltrosBinomial);
mFiltros.add(mFiltrosPasoBajas);
mFiltros.add(mFiltrosPasoAltas);
mFiltros.add(mFiltrosGris);
mFiltros.add(mFiltrosMediana);
mFiltros.add(mFiltrosInvertir);
mFiltros.add(mFiltrosErosion);
mFiltros.add(mFiltrosDilatacion);
mFiltros.add(mFiltrosOpening);
mFiltros.add(mFiltrosClosing);
mFiltros.add(mFiltrosEscalar);
mFiltros.add(mFiltrosUmbral);
mFiltros.add(mFiltrosHistograma);
menu.add(mFiltros);
}

JMenuBar putMenu(){
return (menu);
}
}


class Eventos extends Component implements ActionListener{
VentanaPrincipal frame;
JFileChooser fc=new JFileChooser();
ImagenPanel p;
ImagenPanel2 p2;
//Datos datos;
Filtros filtros;

int valor, iw, ih;
String ruta;
Image imgFuente, imgOriginal;

Eventos(VentanaPrincipal f, ImagenPanel panel, ImagenPanel2 panel2){
frame=f;
p=panel;
p2=panel2;
filtros=new Filtros();
//datos = new Datos(frame);
}

public void actionPerformed(ActionEvent e) {
if(e.getActionCommand().compareTo("Abrir")==0) {
valor = fc.showOpenDialog(frame);
if (valor == JFileChooser.APPROVE_OPTION) {
ruta = fc.getSelectedFile().getAbsolutePath();
System.out.println(fc.getSelectedFile().getAbsolutePath());
imgFuente= Toolkit.getDefaultToolkit().getImage(ruta);
imgOriginal = imgFuente;
p.imagen(imgFuente);

}
}
if(e.getActionCommand().compareTo("Guardar")==0) {
valor=fc.showSaveDialog(frame);
if (valor == JFileChooser.APPROVE_OPTION) {
ruta = fc.getSelectedFile().getAbsolutePath();
System.out.println(fc.getSelectedFile().getAbsolutePath());
imgFuente= Toolkit.getDefaultToolkit().getImage(ruta);
imgOriginal = imgFuente;
p.imagen(imgFuente);




}



if(e.getActionCommand().compareTo("Cerrar")==0) {
p.bandera=false;
p2.bandera=false;
p.repaint();
p2.repaint();
}

if(e.getActionCommand().compareTo("Salir")==0) {
System.exit(0);
}
if(e.getActionCommand().compareTo("Omnidir")==0) {
imgFuente= filtros.omnidir(imgFuente);
p2.imagen(imgFuente);
}
if(e.getActionCommand().compareTo("Borde")==0) {
imgFuente= filtros.borde(imgFuente);
p2.imagen(imgFuente);

}
if(e.getActionCommand().compareTo("Gradiente")==0) {
imgFuente= filtros.gradiente(imgFuente);
p2.imagen(imgFuente);
}
if(e.getActionCommand().compareTo("Binomial")==0) {
imgFuente= filtros.binomial(imgFuente);
p2.imagen(imgFuente);
}
if(e.getActionCommand().compareTo("PasoBajas")==0) {
imgFuente= filtros.pasoBajas(imgFuente);
p2.imagen(imgFuente);
}
if(e.getActionCommand().compareTo("PasoAltas")==0) {
imgFuente= filtros.pasoAltas(imgFuente);
p2.imagen(imgFuente);
}
if(e.getActionCommand().compareTo("Gris")==0) {
imgFuente= filtros.escala_Gris(imgOriginal);
p.imagen(imgFuente);
}
if(e.getActionCommand().compareTo("Mediana")==0) {
imgFuente= filtros.mediana(imgFuente);
p2.imagen(imgFuente);
}
if(e.getActionCommand().compareTo("Invertir")==0) {
imgFuente= filtros.invertir(imgFuente);
p2.imagen(imgFuente);
}
if(e.getActionCommand().compareTo("Erosion")==0) {
imgFuente= filtros.erosion(imgFuente);
p2.imagen(imgFuente);
}
if(e.getActionCommand().compareTo("Dilatacion")==0) {
imgFuente= filtros.dilatacion(imgFuente);
p2.imagen(imgFuente);
}
if(e.getActionCommand().compareTo("Opening")==0) {
imgFuente= filtros.opening(imgFuente);
p2.imagen(imgFuente);
}
if(e.getActionCommand().compareTo("Closing")==0) {
imgFuente= filtros.closing(imgFuente);
p2.imagen(imgFuente);
}
if(e.getActionCommand().compareTo("Escalar")==0) {
imgFuente= filtros.escalar(imgFuente);
p2.imagen(imgFuente);
}
if(e.getActionCommand().compareTo("Umbral")==0) {
imgFuente= filtros.umbral(imgFuente);
p2.imagen(imgFuente);
}

if(e.getActionCommand().compareTo("Histograma")==0) {
Datos datos;
System.out.println("evento---Datos");
datos = new Datos(frame);
int[] h= filtros.histograma(imgFuente);
datos.put_histo(h);
datos.show();
}
}
}

class Pestanas {
JTabbedPane tP= new JTabbedPane();

JTabbedPane putPestana(){
return (tP);
}

void panelActual(ImagenPanel p){
tP.addTab("Imagen Actual", p.putPanel());
}

void panelFiltro(ImagenPanel2 p2){
tP.addTab("Imagen Filtrada", p2.putPanel());
}
}

class ImagenPanel extends JPanel {
Image img;
boolean bandera; //si la imagen esta o no
int fw, fh, iw, ih;

ImagenPanel(){ bandera=false; }

ImagenPanel putPanel(){
//setBackground(Color.blue);
System.out.println("put ImagenPanel");
return (this);
}

void medidas(){
fh=this.getHeight();
fw=this.getWidth();
ih=img.getHeight(this);
iw=img.getWidth(this);
}

void imagen(Image i) {
img= i;
medidas();
bandera=true;
repaint();
}

public void paintComponent(Graphics g) {
super.paintComponent(g);
if(bandera){
MediaTracker m= new MediaTracker(this);
m.addImage(img,1);
try {
if(!m.waitForID(1,1000)) {
System.out.println("fallo---------MediaTracker");
}
} catch(InterruptedException e) {
System.out.println(e);
}
medidas();
System.out.println(fh + "; " + fw + "; " + ih + "; " + iw + "; p1 " );
g.drawImage(img,(fw-iw)/2,(fh-ih)/2,this);
}
System.out.println("panel paint");
}
}

class ImagenPanel2 extends JPanel {
Image img;
boolean bandera; //si la imagen esta o no
int fw, fh, iw, ih;

ImagenPanel2(){ bandera=false; }

ImagenPanel2 putPanel(){
//setBackground(Color.red);
System.out.println("put ImagenPanel2");
return (this);
}

void medidas(){
fh=this.getHeight();
fw=this.getWidth();
ih=img.getHeight(this);
iw=img.getWidth(this);
}

void imagen(Image i){
img=i;
medidas();
bandera=true;
repaint();
}

public void paintComponent(Graphics g) {
super.paintComponent(g);
System.out.println("paint p2");
if(bandera){
// img=createImage(bd.getSource());
System.out.println(fh + "; " + fw + "; " + ih + "; " + iw + "; p2 " );
g.drawImage(img,(fw-iw)/2,(fh-ih)/2,this); //centra la img en el tab
}
}
}

class Datos extends JDialog{
int[] hist;
int[] temp=new int[256];
int max;
int iw, ih;

Datos(VentanaPrincipal f){
super(f, "Histograma");
System.out.println("constructor Datos");
max = iw = ih = 0;
}

void put_histo(int[] h){
hist=h;
System.out.println("put_histo---Datos");
repaint();
}

public void paint(Graphics g){
for(int i=0; i<256;i++) {
if(hist[i] > max)
max= hist[i];
//System.out.println("paint -for- datos");
}
//if(max>400){
for(int i=0; i<256;i++) {
//hist[i]=(int)(hist[i]*400)/max;
temp[i]=(int)(hist[i]*400)/max; //maximo de altura
//System.out.println(hist[i]+"___"+i+"_____"+temp[i]);
}
max=400;
//}
iw=300;
ih=450;
//ih=max+40;
int x, y, dif, p1, p2;
setSize(iw,ih);
System.out.println("paint -dibujar- datos");
for(int i=0; i<256 ; i++) {
y=0;
p1=0;
p2=0;
dif=0;
//dif=max+25-hist[i];
dif=max-temp[i];
p2=y+dif;
//p1=dif+hist[i];
p1=dif+temp[i];
g.setColor(Color.red);
if(i==40){ g.setColor(Color.blue); }
g.drawLine(i+20,p1+30,i+20,p2+30);
}
}
}

class Filtros extends Component{
BufferedImage bf, bd;
int iw, ih;
// int[] pixels;
int[] pix;
float[] pasoB = { 1/9.0f, 1/9.0f, 1/9.0f, 1/9.0f, 1/9.0f, 1/9.0f, 1/9.0f, 1/9.0f, 1/9.0f } ;
float[] borde = { 0.0f, -1.0f, 0.0f, -1.0f, 4.0f, -1.0f, 0.0f, -1.0f, 0.0f } ;
float[] grad = { 0.0f, 1.0f, 0.0f, 1.0f, -4.0f, 1.0f, 0.0f, 1.0f, 0.0f } ;
float[] binom = { 1.0f, 2.0f, 1.0f, 2.0f, 4.0f, 2.0f, 1.0f, 2.0f, 1.0f } ;
float[] omni = { -1.0f, -1.0f, -1.0f, -1.0f, 8.0f, -1.0f, -1.0f, -1.0f, -1.0f } ;
float[] pasoA = { -1.0f, -1.0f, -1.0f, -1.0f, 9.0f, -1.0f, -1.0f, -1.0f, -1.0f } ;
Image imgFiltrada;

void medidas(Image img){
ih=img.getHeight(this);
iw=img.getWidth(this);
}
Image omnidir(Image img){
convolucion(omni, img);
return (imgFiltrada);
}
Image borde(Image img){
convolucion(borde, img);
return (imgFiltrada);
}
Image gradiente(Image img){
convolucion(grad, img);
return (imgFiltrada);
}
Image binomial(Image img){
convolucion(binom, img);
return (imgFiltrada);
}
Image pasoBajas(Image img){
convolucion(pasoB, img);
return (imgFiltrada);
}
Image pasoAltas(Image img){
convolucion(pasoA, img);
return (imgFiltrada);
}

/* void convolucion(int[] filtro, BufferedImage bi){
bd = new BufferedImage(iw,ih,BufferedImage.TYPE_INT_RGB);
Kernel k = new Kernel(3,3,filtro);
ConvolveOp c=new ConvolveOp(k);
System.out.println("----------------Convolucion--BI------------");
//Graphics temp = bf.createGraphics();
temp.drawImage(img,0,0,this);
c.filter(bi,bd);
img=createImage(bd.getSource())
}
*/
void convolucion(float[] filtro, Image img){
medidas(img);
bf = new BufferedImage(iw,ih,BufferedImage.TYPE_INT_RGB);
bd = new BufferedImage(iw,ih,BufferedImage.TYPE_INT_RGB);
Kernel k = new Kernel(3,3,filtro);
ConvolveOp c=new ConvolveOp(k);
System.out.println("----------------Convolucion--img------------");
Graphics temp = bf.createGraphics();
temp.drawImage(img,0,0,this);
c.filter(bf,bd);
imgFiltrada = createImage(bd.getSource());
}

int[] img_To_Array(Image img){
//int[] pix;
PixelGrabber pg;
try{
MediaTracker t= new MediaTracker(this);
t.addImage(img,0);
t.waitForID(0);
medidas(img);
pix = new int[iw * ih];
pg = new PixelGrabber(img, 0, 0, iw, ih, pix, 0, iw);
pg.grabPixels();
} catch (InterruptedException e) {
System.err.println("interrupted waiting for pixels!--------PixelGrab");
//return;
}
return pix;
}

Image escala_Gris(Image img){
int[] pixels;
pixels = img_To_Array(img);
for (int i = 0; i < iw * ih; i++) {
int pixel = pixels[i];
int alpha = (pixel >> 24) & 0xff;
int red = (pixel >> 16) & 0xff;
int green = (pixel >> 8) & 0xff;
int blue = (pixel ) & 0xff;
int promedio = (red+green+blue)/3;
pixels[i]= 0xff000000 | promedio<<16 | promedio<<8 | promedio;
}
imgFiltrada = createImage(new MemoryImageSource(iw,ih,pixels,0,iw));
return (imgFiltrada);
}
Image invertir(Image img){
int[] pixels;
pixels = img_To_Array(img);
for (int i = 0; i < iw * ih; i++) {
int pixel=pixels[i];
int alpha = (pixel >> 24) & 0xff;
int red = (pixel >> 16) & 0xff;
int green = (pixel >> 8) & 0xff;
int blue = (pixel ) & 0xff;
int promedio =255-(red+green+blue)/3;
pixels[i]= 0xff000000 | promedio<<16 | promedio<<8 | promedio;
}
imgFiltrada = createImage(new MemoryImageSource(iw,ih,pixels,0,iw));
return (imgFiltrada);
}

int[] histograma(Image img){
int[] pixels;
int[] hist = new int[256];
for(int i=0; i<256; i++) {
hist[i]=0;
}
pixels = img_To_Array(img);
for (int i = 0; i < iw * ih; i++) {
int pixel=pixels[i];
int red = (pixel >> 16) & 0xff;
int green = (pixel >> 8) & 0xff;
int blue = (pixel ) & 0xff;
//int promedio = (red+green+blue)/3;
int promedio = blue;
hist[promedio]++;
}
System.out.println("histograma--------filtros");
return (hist);
}

Image mediana(Image img){
int[] med;
int[] pixels;
int[] temp = new int[iw*ih];
med = new int[9];
pixels = img_To_Array(img);
for(int j = 1; j < ih-1; j++ ){
for(int i = 1; i < iw-1; i++){
med[0] = pixels[iw*(j-1)+(i-1)];
med[1] = pixels[iw*(j-1)+i];
med[2] = pixels[iw*(j-1)+(i+1)];
med[3] = pixels[iw*j+(i-1)];
med[4] = pixels[iw*j+i];
med[5] = pixels[iw*j+(i+1)];
med[6] = pixels[iw*(j+1)+(i-1)];
med[7] = pixels[iw*(j+1)+i];
med[8] = pixels[iw*(j+1)+(i+1)];
Arrays.sort(med);
//pixels[iw*j+i]=med[4]; //(j-1)+(i-1)
temp[iw*j+i]=med[4];
}
}
//imgFiltrada = createImage(new MemoryImageSource(iw,ih,pixels,0,iw));
imgFiltrada = createImage(new MemoryImageSource(iw,ih,temp,0,iw));
return (imgFiltrada);
}
Image erosion(Image img){
int blue, resta;
int[] min = new int[9];
int[] pixels;
int[] temp = new int[iw*ih];
pixels = img_To_Array(img);
for(int j = 1; j < ih-1; j++ ){
for(int i = 1; i < iw-1; i++){
int cont=0;
for(int j2 = j-1; j2 < j+2; j2++){
for(int i2 = i-1; i2 < i+2; i2++){
blue = (pixels[iw*j2+i2]) & 0xff;
resta = blue;
min[cont]= 0xff000000 | resta<<16 | resta<<8 | resta;
cont++;
}
}
Arrays.sort(min);
//pixels[iw*(j-1)+(i-1)]=min[0];
temp[iw*j+i]=min[0];
//pixels[iw*(j)+(i)]=0xff000000 | min[0]<<16 | min[0]<<8 | min[0];
/*
min[0] = pixels[iw*(j-1)+(i-1)];min[1] = pixels[iw*(j-1)+i];min[2] = pixels[iw*(j-1)+(i+1)];
min[3] = pixels[iw*j+(i-1)];min[4] = pixels[iw*j+i];min[5] = pixels[iw*j+(i+1)];
min[6] = pixels[iw*(j+1)+(i-1)];min[7] = pixels[iw*(j+1)+i];min[8] = pixels[iw*(j+1)+(i+1)];
Arrays.sort(min);pixels[iw*(j)+(i)]=min[0]; //iw*(j-1)+(i-1)
*/ }
}
//imgFiltrada = createImage(new MemoryImageSource(iw,ih,pixels,0,iw));
imgFiltrada = createImage(new MemoryImageSource(iw,ih,temp,0,iw));
return (imgFiltrada);
}
Image dilatacion(Image img){
int[] max = new int[9];
int[] pixels;
int[] temp = new int[iw*ih];
pixels = img_To_Array(img);
for(int j = 1; j < ih-1; j++ ){
for(int i = 1; i < iw-1; i++){
max[0] = pixels[iw*(j-1)+(i-1)];
max[1] = pixels[iw*(j-1)+i];
max[2] = pixels[iw*(j-1)+(i+1)];
max[3] = pixels[iw*j+(i-1)];
max[4] = pixels[iw*j+i];
max[5] = pixels[iw*j+(i+1)];
max[6] = pixels[iw*(j+1)+(i-1)];
max[7] = pixels[iw*(j+1)+i];
max[8] = pixels[iw*(j+1)+(i+1)];
Arrays.sort(max);
//pixels[iw*(j-1)+(i-1)]=max[0];
temp[iw*j+i]=max[8];
}
}
//imgFiltrada = createImage(new MemoryImageSource(iw,ih,pixels,0,iw));
imgFiltrada = createImage(new MemoryImageSource(iw,ih,temp,0,iw));
return (imgFiltrada);
}
Image opening(Image img){
Image i;
i = erosion(img);
i = dilatacion(i);
return (i);
}
Image closing(Image img){
Image i;
i = dilatacion(img);
i = erosion(i);
return (i);
}
Image escalar(Image img){
Image i;
medidas(img);
i = img.getScaledInstance(iw+20, ih+20, 0);
return (i);
}
Image umbral(Image img){
int[] pixels;
int umbral=40;
int negro=0;
int blanco=255;
pixels = img_To_Array(img);
for(int j = 0; j < ih; j++ ){
for(int i = 0; i < iw; i++){
int blue = (pixels[iw*j+i]) & 0xff;
//System.out.println(blue);
if(blue>35 && 45>blue){ //(blue>35 && 45>blue)
//pixels[iw*j+i]= 0xff000000 | blanco<<16 | blanco<<8 | blanco; }
pixels[iw*j+i]= 0xff000000 | blue<<16 | blue<<8 | blue; }
//if(umbral>blue){
else{
//pixels[iw*j+i]= 0xff000000 | negro<<16 | negro<<8 | negro; }
pixels[iw*j+i]= 0xff000000 | blanco<<16 | blanco<<8 | blanco; }
}
}
imgFiltrada = createImage(new MemoryImageSource(iw,ih,pixels,0,iw));
return (imgFiltrada);
}



}

----------------------

El error que me sale es:

prueba9_1.java [686:1] '}' expected
^
1 error
Errors compiling prueba9_1.
------------------------------

De verdad necesito muchísimo de su ayuda

De antemano muchisimas gracias, espero si me puedan ayudar, de verdad estoy ya desesperada.

Bye

jajaj
08 de Marzo del 2008
cabron, estructuralo un poquito mejor no?

Mario Lavarreda
08 de Marzo del 2008
Solo te falta un "}" al final de la clase...

Betsa23
08 de Marzo del 2008
Exactamente donde? Por favor, porque lo puse al final y no me corrio, seria mucha molestia que me dijeras de favor dónde exactamente, soy principiante en esto de Java.

Gracias