Foros del Web » Programación para mayores de 30 ;) » Java »

problema con un JAVA.LANG.NoClassDefFoundError

Estas en el tema de problema con un JAVA.LANG.NoClassDefFoundError en el foro de Java en Foros del Web. Buenas a todos Ojalá puedan darme una mano, estoy creando una aplicación que cada cierto tiempo buscará en dos directorios archivos de un cierto tipo ...
  #1 (permalink)  
Antiguo 24/11/2009, 00:51
 
Fecha de Ingreso: marzo-2008
Mensajes: 63
Antigüedad: 16 años, 2 meses
Puntos: 0
Pregunta problema con un JAVA.LANG.NoClassDefFoundError

Buenas a todos

Ojalá puedan darme una mano, estoy creando una aplicación que cada cierto tiempo buscará en dos directorios archivos de un cierto tipo que fueron creados hace más de 3 días, cuando ejecuto mi programa en windows me va muy bien, pero cuando cambio de plataforma y ejecuto mi archivo jar me devuelve el siguiente error JAVA.LANG.NoClassDefFoundError, especificamente en la línea 20 (nameFilter filtera = new nameFilter(strFiltera)) no entiendo porque sale esta excepción, pero seguramente ustedes si, le dejo el código

Código:
import java.text.SimpleDateFormat; 
import java.io.*;
import java.util.*;

class sigue extends Thread
{
   private boolean running = true;
   
   public sigue() {}

   public void run()
   {
      String strFiltera = "MTL";
      String strFilea = "C:/TOLEDO";
      String strFilterb = "MTL";
      String strFileb = "C:/BZB/SXCASH/T";
      //C:/BZB/SXCASH/T
      while (running)
      {
         nameFilter filtera = new nameFilter(strFiltera);
         findFiles (new File(strFilea), filtera);
         nameFilter filterb = new nameFilter(strFilterb);
         findFiles (new File(strFileb), filterb);
         System.out.println("Depurando archivos MTL...");
         System.out.println("");
         try
         {
            Thread.sleep(10000);
         }
         catch (InterruptedException e)
         {
            running = false;
         }

      }
   }
   
   public static void main(String[] args) throws IOException
   {
      new sigue().start();
   }

   private class nameFilter implements FileFilter
   {
      
      private String mask;
      nameFilter(String mask)
      {
         this.mask = mask;
      }
      
      public boolean accept(File file)
      {
         Date dateModification = new Date(file.lastModified());
         SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
         String fecha = sdf.format(dateModification);
         String d1, m1, a1;
         int n1, n2, n3, n4, n5, n6;
         d1 = fecha.substring(0,2);
         m1 = fecha.substring(3,5);
         a1 = fecha.substring(6,10);
         n1 = Integer.parseInt(d1);
         n2 = Integer.parseInt(m1);
         n3 = Integer.parseInt(a1);
         
         Calendar calendario = Calendar.getInstance();
         int d2, m2, a2;
         d2 = calendario.get(Calendar.DAY_OF_MONTH);
         String d3, m3;
         d3 = String.valueOf(d2);
         if (d3.length() < 2)
         {
            d3 = "0" + d3;
         }
         m2 = calendario.get(Calendar.MONTH);
         m2 = m2 + 1;
         m3 = String.valueOf(m2);
         if (m3.length() < 2)
         {
            m3 = "0" + m3;
         }
         a2 = calendario.get(Calendar.YEAR);
         n4 = Integer.parseInt(d3);
         n5 = Integer.parseInt(m3);
         n6 = a2;
         double date1 = toJulian(new int[]{n3,n2,n1});
         double date2 = toJulian(new int[]{n6,n5,n4});
         double resta = date2 - date1;
         int res = (int)resta;
         //System.out.println("Entre " + dates + " y " + " hay: " + res + " dias");
         
         if (file.getName().length() > 1)
         {
            return file.getName().startsWith(mask) && res > 2;
         }
         return false;
      }
   }
   
   public static void findFiles(File file, FileFilter filter)
   {
      if (file.isDirectory())
      {
         File[] list = file.listFiles(filter);
         for (int i = 0; i < list.length; i++)
         {
            findFiles(list[i], filter);
         }
      }
      else
      {
         try
         {
            System.out.println("Mi archivo" + file.getPath() + " Puedo borrarlo si quiero");
            //file.delete();
         }
         catch (Exception e)
         {
            System.out.println("Rayos algo paso");
         }
      }
   }

   public static int JGREG= 15 + 31*(10+12*1582);
   public static double HALFSECOND = 0.5;
   
   public static double toJulian(int[] ymd) 
   {
      int year=ymd[0];
      int month=ymd[1]; // jan=1, feb=2,...
      int day=ymd[2];    
      int julianYear = year;
      if (year < 0) julianYear++;
      int julianMonth = month;
      if (month > 2) 
      {
         julianMonth++;
      }
      else
      {
         julianYear--;
         julianMonth += 13;
      }
      
      double julian = (java.lang.Math.floor(365.25 * julianYear) + java.lang.Math.floor(30.6001*julianMonth) + day + 1720995.0);
      if (day + 31 * (month + 12 * year) >= JGREG) 
      {
         // change over to Gregorian calendar
         int ja = (int)(0.01 * julianYear);
         julian += 2 - ja + (0.25 * ja);
      }
      return java.lang.Math.floor(julian);
   }
   

}
el asunto es que esta aplicación no funcionaré en windows.

Agradezco su atención y ayuda que puedan darme. Un saludo.
  #2 (permalink)  
Antiguo 24/11/2009, 02:18
Avatar de elAntonie  
Fecha de Ingreso: febrero-2007
Mensajes: 894
Antigüedad: 17 años, 2 meses
Puntos: 10
Respuesta: problema con un JAVA.LANG.NoClassDefFoundError

Wenas

nameFilter no es lo mismo que NameFilter

Saludos.
  #3 (permalink)  
Antiguo 24/11/2009, 04:46
Avatar de Fuzzylog  
Fecha de Ingreso: agosto-2008
Ubicación: En internet
Mensajes: 2.511
Antigüedad: 15 años, 8 meses
Puntos: 188
Respuesta: problema con un JAVA.LANG.NoClassDefFoundError

Veamos.

Como consejo define tus clases en mayúscula (NameFilter) y los objetos en minúscula.

1º Comprueba si tienes bien definido el classpath de la máquina virtual, es decir, la ruta donde va a buscar los .class

2º Si lo anterior es correcto, puedes probar a definir la clase en un jar aparte e importarlo, a definirla en un archivo diferente dentro del mismo proyecto, o a definirla antes de instanciarla en el mismo archivo.

Suerte
  #4 (permalink)  
Antiguo 24/11/2009, 14:06
 
Fecha de Ingreso: marzo-2008
Mensajes: 63
Antigüedad: 16 años, 2 meses
Puntos: 0
Respuesta: problema con un JAVA.LANG.NoClassDefFoundError

Gracias por la ayuda, aunque no he logrado hacer que esto funcione, a ver si alguien pudiera ayudarme o profundizar acerca del punto 2, que comenta Fuzzylog.

Nuevamente gracias.
  #5 (permalink)  
Antiguo 25/11/2009, 02:24
Avatar de Fuzzylog  
Fecha de Ingreso: agosto-2008
Ubicación: En internet
Mensajes: 2.511
Antigüedad: 15 años, 8 meses
Puntos: 188
Respuesta: problema con un JAVA.LANG.NoClassDefFoundError

Si hubiera varias clases en el mismo fichero, java sólo permite que se pueda usar una de ellas desde código que esté fuera del fichero. Esa clase que se puede ver desde todos lados debe llevar el modificador public. Además, la clase public debe ser obligatoriamente la que se lllama igual que el fichero.

Es decir, que la clase Sigue debe tener el mismo nombre que el archivo: Sigue.java (esta clase será accesible desde fuera). Si has llamado a la clase que contiene al main fileFilter puede que sea lo que te esté dando problemas.

Define la clase Sigue como "public" o "private" o como quieras.

Prueba ahora a ver si te funciona.
  #6 (permalink)  
Antiguo 04/12/2009, 10:34
 
Fecha de Ingreso: marzo-2008
Mensajes: 63
Antigüedad: 16 años, 2 meses
Puntos: 0
De acuerdo Solución: problema con un JAVA.LANG.NoClassDefFoundError

Buenas a todos!,

quiero agradecer a todos lo que miraron este tema y sobre todo a los que contestaron, la ayuda que recibí no fue de mucha ayuda pero gracias por intentarlo.

Quiero comentarles que ya resolví el problema, era una cosa muy sencilla pero que al final siempre es un problema, les explico la solución,

cuando yo compilo el programa

c:\>javac sigue.java

me crea un archivo que se llama sigue$nameFilter.class

cuando ejecuto el programa en mi computadora no hay problema porque manda llamar a este archivo, pero al llevarmelo a otra máquina como no existe ese archivo manda el famoso error: JAVA.LANG.NoClassDefFoundError bla, bla, bla

que hay que hacer?, muy sencillo, cuando creas el archivo jar hay aque hacer lo siguiente:

c:\>jar cvfm sigue.jar MANIFEST.MF sigue.class sigue$nameFilter.class
manifest agregado
agregando: depura.class(entrada = 2231) (salida= 1432)(desinflado 35%)
agregando: depura$NameFound.class(entrada = 1690) (salida= 1030)(desinflado 39%)

el archivo manifest solo debe contener el class principal en este caso sigue, y listo puedes ejectutar tu jar en cualquier máquina, si no me crees pruebalo

c:\>java -jar sigue.jar
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 07:19.