[Hilo Oficial II] Java

Muchas gracias por molestarlos en responderme :)...la tengo terminada desde el sabado y me ha quedado genial :). Ahora estoy ya con interfaces, si algun día queréis hacer eso por lo que seas y no lo conseguís, aquí me tenéis .
Buenas,

Cree unas clases para el manejo de una base de datos MySQL. Estuve probándolas en java y todas funcionaban correctamente. La cosa es que quería usarlas ahora en un nuevo proyecto para aprender JSP con ellas y me está dando muchos dolores de cabeza. Tras pelearme con eclipse, metí las clases a pelo en el proyecto con lo que solucioné el primer problema, ahora me encuentro con el segundo y es que parece que no reconoce el driver jdbc cuando tengo incluido el jar en el build path del proyecto. Al darle a lanzar el jsp principal del proyecto, que llama a las clases que comento, me lanza el siguiente error:

java.lang.ClassNotFoundException: com.mysql.jdbc.Driver


¿Alguna idea de a qué puede deberse?

Un saludo y gracias de antemano. Vaya dolores de cabeza me está dando jsp y Eclipse [buuuaaaa]
Pues por lo que sea, no te está cogiendo el conector de MySQL, pero sin código poco mas se puede mirar ...
¿Haces los imports correctos desde JSP?

Algo de código no vendría mal para ver si está todo ok
daniel_5 escribió:Pues por lo que sea, no te está cogiendo el conector de MySQL, pero sin código poco mas se puede mirar ...
¿Haces los imports correctos desde JSP?

Algo de código no vendría mal para ver si está todo ok


+1, es difícil ver la causa así a las bravas xD

Saludos,
Era exactamente eso. Ha sido un poco caos porque hasta que he dado con la causa he tardado bastante, me daba errores el código y no sabía a que se debía. Al final copiando jdbc a las carpetas necesarias del jdk se ha solucionado, pero joder, lo que ha costado [+risas]

Gracias a los dos!
Has copiado el conector al lib de la JDK?? ¬_¬

Para los que tengais jaleo con la importación de librerías en eclipse, os recomiendo Maven, vereis que facil es importar librerías y dependencias en los proyectos, y tenerlo todo ordenado :)
Una pregunta rápida compañeros, estoy intentado cargar un array de objetos serializados en un jlist pero no consigo que me cargue, el código lo tengo hecho así :

for (int i = 0; i < main.listatiposdetrabajo.size(); i++) {
modelotrabajo.addElement(main.listatiposdetrabajo.get(i).getNombre());
}


Con esto debería cargar todos los nombres en el jlist no?

Un saludo y gracais
Has comprobado que la lista este llena?

Utilizad el debugger del IDE que utiliceis, así es mas fácil comprobar que pasa en ese tipo de métodos, aparte con ese troxo de código es imposible saber mas ;)
(mensaje borrado)
Hola, utilizo eclipse para programar en java y estoy atascado haciendo un programa para devolver un matriz m resultado de haber eliminado la fila n, es decir:

/**
* Devuelve un matriz resultado de haber eliminado la fila
* n-ésima de la matriz m pasada como argumento.
* @param m matriz
* @param n fila
* @return matriz resultado de haber eliminado la fila
* n-ésima fila de la matriz m pasada como argumento..
* null si m no e matriz o no existe la fila.
*/

Esto es lo que llevo hecho:

public static double [][] quitarFila(double [][] m, int n){
if (!esMatriz(m)){
return null;
}
if(n>=m.length || n<0){
return null;
}
if (m[n] == null){
return null;
}
double array [][] = new double[m.length-1][m[0].length];

}

Para resolverlo dispongo de unos cuantos métodos que son los siguientes: getFila (devuelve un array con la fila n de una matriz), getColumna (devuelve un array con la columna n de una matriz), clonarArray, clonarMatriz, esMatriz (devuelve un booleano que nos indica si es matriz cuadrada) , esMatrizCuadrada (devuelve un booleano que nos indica si es matriz cuadrada).

Espero que me podáis ayudar. Saludos y gracias de antemano.
Para Joseph David

Con 2 "For" anidados resuelves fácilmente el problema

Un for para las filas y el otro para las columnas, cuando la fila que vayas a recorrer sea igual al parámetro que te llega utilizas la sentencia "continue;" para saltarte la fila. En todos los demás casos vas recorriendo la matriz y copiándola en una matriz nueva que devolverás como parámetro de salida.

De esta manera no tienes ni que preocuparte de comprobar el parámetro de entrada que te indica la fila.

No te escribo el código porque creo que con el planteamiento que te hago te las podrás apañar.

Saludos,
Rossyafk escribió:Para Joseph David

Con 2 "For" anidados resuelves fácilmente el problema

Un for para las filas y el otro para las columnas, cuando la fila que vayas a recorrer sea igual al parámetro que te llega utilizas la sentencia "continue;" para saltarte la fila. En todos los demás casos vas recorriendo la matriz y copiándola en una matriz nueva que devolverás como parámetro de salida.

De esta manera no tienes ni que preocuparte de comprobar el parámetro de entrada que te indica la fila.

No te escribo el código porque creo que con el planteamiento que te hago te las podrás apañar.

Saludos,

Esta bien pensado, pero en la uni nos nos dejan usar continue, ni breaks ....
elenano2 escribió:Una pregunta rápida compañeros, estoy intentado cargar un array de objetos serializados en un jlist pero no consigo que me cargue, el código lo tengo hecho así :

for (int i = 0; i < main.listatiposdetrabajo.size(); i++) {
modelotrabajo.addElement(main.listatiposdetrabajo.get(i).getNombre());
}


Con esto debería cargar todos los nombres en el jlist no?

Un saludo y gracais


Porque no trabajas con iterables, pasas el array a un iterable con esto:
public static <T> Iterable<T> fromArray(T[] array) {
return Arrays.asList(array);
}
Y te da mas juego usando el iterable y guava
(mensaje borrado)
Joseph David escribió:Esta bien pensado, pero en la uni nos nos dejan usar continue, ni breaks ....



Joseph David, te dejan modelar el problema de otra forma,o tienes que hacer la matriz con [][]???
emudrag escribió:
Joseph David escribió:Esta bien pensado, pero en la uni nos nos dejan usar continue, ni breaks ....



Joseph David, te dejan modelar el problema de otra forma,o tienes que hacer la matriz con [][]???

Tengo que hacerlo con la matriz con [][].
Joseph David escribió:
emudrag escribió:
Joseph David escribió:Esta bien pensado, pero en la uni nos nos dejan usar continue, ni breaks ....



Joseph David, te dejan modelar el problema de otra forma,o tienes que hacer la matriz con [][]???

Tengo que hacerlo con la matriz con [][].


Está el método "cutre" y sencillo que es utilizar un if dentro del bucle para saltarte la linea, que basicamente es lo mismo que hacer un continue.

Te pongo mi solución(mejor si la piensas tú antes):
for (int i = 0, j = 0; i < m.length; ++i) {
   if (i != n) {
      array[j] = getFila(m, i);
      ++j;
   }
}


Luego hay una forma más elegante sin usar if, pero te dejo que la pienses tú [sonrisa]

Salu2
Joseph David escribió:Hola, utilizo eclipse para programar en java y estoy atascado haciendo un programa para devolver un matriz m resultado de haber eliminado la fila n, es decir:

/**
* Devuelve un matriz resultado de haber eliminado la fila
* n-ésima de la matriz m pasada como argumento.
* @param m matriz
* @param n fila
* @return matriz resultado de haber eliminado la fila
* n-ésima fila de la matriz m pasada como argumento..
* null si m no e matriz o no existe la fila.
*/

Esto es lo que llevo hecho:

public static double [][] quitarFila(double [][] m, int n){
if (!esMatriz(m)){
return null;
}
if(n>=m.length || n<0){
return null;
}
if (m[n] == null){
return null;
}
double array [][] = new double[m.length-1][m[0].length];

}

Para resolverlo dispongo de unos cuantos métodos que son los siguientes: getFila (devuelve un array con la fila n de una matriz), getColumna (devuelve un array con la columna n de una matriz), clonarArray, clonarMatriz, esMatriz (devuelve un booleano que nos indica si es matriz cuadrada) , esMatrizCuadrada (devuelve un booleano que nos indica si es matriz cuadrada).

Espero que me podáis ayudar. Saludos y gracias de antemano.


Y por que no lo pasas a una lista, haces un remove de la fila recibida por parámetro y despues lo vuelves a pasar a array?
Hola Gente! Acudo a vosotros por una dudilla que tengo para compartir un arraylist.

Necesito acceder a un arraylist desde varios Frames, y lo he generado en uno y en ese mismo he creado un metodo DevolverListado(), que lo devuelve mediante return.

Lo que no se, es si esto es correcto, o si funciona directamente...por que luego lo recogo asi :

gestor = GestorCuentas.getInstance();
listaCuentas= gestor.DevolverListado();

Y no contiene ningún valor...si me lo podéis aclarar os lo agradeceré eternamente, ya que se me acaba el plazo este domingo :S y no se como hacerlo..

Muchas gracias por adelantado :)
elenano2 escribió:Hola Gente! Acudo a vosotros por una dudilla que tengo para compartir un arraylist.

Necesito acceder a un arraylist desde varios Frames, y lo he generado en uno y en ese mismo he creado un metodo DevolverListado(), que lo devuelve mediante return.

Lo que no se, es si esto es correcto, o si funciona directamente...por que luego lo recogo asi :

gestor = GestorCuentas.getInstance();
listaCuentas= gestor.DevolverListado();

Y no contiene ningún valor...si me lo podéis aclarar os lo agradeceré eternamente, ya que se me acaba el plazo este domingo :S y no se como hacerlo..

Muchas gracias por adelantado :)


Hombre, así a bote pronto, no hay ningún fallo en la recoguida de tu código. Si pones el código completo estaría bien para ver si lo recogues bien o estás haciendo mal la recoguida tal como la recogues ahora.

Salu2
Buen compañeros, eso lo solucione ayer, eso estaba perfecto y me estaba fallando solo una linea estupida.....xD

Ahora tengo una duda, que como nunca lo he hecho,no estoy seguro de como hacerlo.

En un array guardo tres tipos de objetos (cuentaahorro,cuentapersonal y cuentaempresa), esos tres objetos los guardo en un array, pero a la hora de poder recogerlos no se como hacerlo bien.

Es decir, cada objeto tiene sus metodos y variables difernetes(Obviamente estoy usando herencia) pero no se como saber que tipo de objeto es el que recupero.

He probado con:

if (listaCuentas.get(i) instanceof CuentaAhorro ){

CuentaAhorro auxAhorro = new CuentaAhorro();
auxAhorro.equals(listaCuentas.get(i));

Pero no funciona y no se si es correcto...

Si me podéis decir como se cogen los objetos de un array diferenciandolos os lo agradecería :)
Suponiendo que Cuenta sea el tipo de objeto del que heredan las otras 3:

Cuenta cuenta = listaCuentas.get(i);

if (cuenta instanceof CuentaAhorro){
   // opción 1
   CuentaAhorro cuentaAhorro = (CuentaAhorro) cuenta;
   cuentaAhorro.medotoQueSoloEstaEnCuentaAhorro();

   // opción 2
   ((CuentaAhorro) cuenta).medotoQueSoloEstaEnCuentaAhorro();
}


Lo único que tienes que hacer es un cast de clase. Tienes varias opciones, si lo que quieres es tener el objeto de la clase heredada para usarlo varias veces, puedes hacer un objeto nuevo y hacer el cast; si sólo necesitas usar una función de la clase heredada una vez, puedes hacer el cast directamente sobre el objeto y olvidarte.
Muchas gracias amuchamu!Lo tena parecido pero no hacia bien el cast como tu...........ahora mismo lo prueba que estoy retocando unas cosas y te digo :)

Muchas gracias!

PD: de nuevo gracias, lo he hecho en un segundo con esto :) me funciona perfecto ya :)
Saludos!

Tengo una clase hecha en Java llamada FileTree que hereda de JPanel, que basicamente es un Jtree que muestra una estructura de ficheros:

Imagen

El caso es que con un main de prueba me funciona perfectamente, pero a la hora de instanciar la clase en un frame ya completo que tengo, no muestra nada, me sale un JPanel vacío.

public static void main(String[] av) {

    JFrame frame = new JFrame("FileTree");
    frame.setForeground(Color.black);
    frame.setBackground(Color.lightGray);
    JPanel jpn = new JPanel();
    frame.add(new FileTree(new File("..")));
   
    frame.pack();
    frame.setVisible(true);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  }


Lo he hecho de la siguiente manera: He añadido la clase a la paleta de componentes Net Beans y desde allí con el diseñador gráfico lo añado al proyecto (se muestra como un Panel vacío). Luego substituyo la creadora del panel con:
FT1 = new FileTree(new File("..")));


(FT1 es el nombre de la instancia de FileTree que he puesto en el editor).

Pero al ejecutar se me muestra el Panel como vacío, cuando quiero que me muestre el arbol de ficheros como si hace en el main.

Adjunto la clase por si las moscas, aunque creo que el problema esta en la instanciación ya que en el main va bién.

public class FileTree extends JPanel{

  public FileTree (){};
 
  public FileTree(File dir) {
    setLayout(new BorderLayout());
    JTree tree = new JTree(addNodes(null, dir));

    tree.addTreeSelectionListener(new TreeSelectionListener() {
      public void valueChanged(TreeSelectionEvent e) {
        DefaultMutableTreeNode node = (DefaultMutableTreeNode) e
            .getPath().getLastPathComponent();
        System.out.println("You selected " + node);
      }
    });

    JScrollPane scrollpane = new JScrollPane();
    scrollpane.getViewport().add(tree);
    add(BorderLayout.CENTER, scrollpane);   
  }

  DefaultMutableTreeNode addNodes(DefaultMutableTreeNode curTop, File dir) {
    String curPath = dir.getPath();
    DefaultMutableTreeNode curDir = new DefaultMutableTreeNode(curPath);
    if (curTop != null) {
      curTop.add(curDir);
    }
    Vector ol = new Vector();
    String[] tmp = dir.list();
    for (int i = 0; i < tmp.length; i++)
      ol.addElement(tmp[i]);
    Collections.sort(ol, String.CASE_INSENSITIVE_ORDER);
    File f;
    Vector files = new Vector();
    for (int i = 0; i < ol.size(); i++) {
      String thisObject = (String) ol.elementAt(i);
      String newPath;
      if (curPath.equals("."))
        newPath = thisObject;
      else
        newPath = curPath + File.separator + thisObject;
      if ((f = new File(newPath)).isDirectory())
        addNodes(curDir, f);
      else
        files.addElement(thisObject);
    }
    for (int fnum = 0; fnum < files.size(); fnum++)
      curDir.add(new DefaultMutableTreeNode(files.elementAt(fnum)));
    return curDir;
  }
 
    @Override
    public Dimension getMinimumSize() {
    return new Dimension(200, 400);
  }

    @Override
  public Dimension getPreferredSize() {
    return new Dimension(200, 400);
  }

    public static void main(String[] av) {

    JFrame frame = new JFrame("FileTree");
    frame.setForeground(Color.black);
    frame.setBackground(Color.lightGray);
    JPanel jpn = new JPanel();
    frame.add(new FileTree(new File("..")));
   
    frame.pack();
    frame.setVisible(true);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  }
}

Si alguien con paciencia me ayuda, se lo agradeceré eternamente :)

EDIT: Arreglado, tenía que tocar partes del Generated Code que no me iban.
Hola compañeros, estoy haciendo un aplicación pero quiero hacer cosas visuales que no tiene java swing. Hay alguna librería por hay que permita mas cosas visuales?

Sabéis de algún sitio donde se explique como crear tus propias librerías visuales?

Gracias y un saludo
Hola buenas. Tengo un pequeño gran problema con las conexiones a bbdd oracle.
Hasta ahora no tenia limite de conexiones, pero ahora nos las ha limitado a 20 y he visto que esas comexiones no se estan cerrando. el metodo indica que si se cierran pero no es asi. No se poe que ocurre. La solucion seria utilizar un pool. Teneis alguno un ejemplo? he buacado y ninguno me convence. Me daria igual que el datasource fuera el de apache o el de oracle.
daniel_5 escribió:Hola buenas. Tengo un pequeño gran problema con las conexiones a bbdd oracle.
Hasta ahora no tenia limite de conexiones, pero ahora nos las ha limitado a 20 y he visto que esas comexiones no se estan cerrando. el metodo indica que si se cierran pero no es asi. No se poe que ocurre. La solucion seria utilizar un pool. Teneis alguno un ejemplo? he buacado y ninguno me convence. Me daria igual que el datasource fuera el de apache o el de oracle.


¿Algo así?
   Connection conn = null;
   OracleDataSource ods = null;
   
   Properties cacheProps = new Properties();
   cacheProps.setProperty("MinLimit", "1");
   cacheProps.setProperty("MaxLimit", "10");
   cacheProps.setProperty("InitialLimit", "5");
   cacheProps.setProperty("ConnectionWaitTimeout", "5");
   cacheProps.setProperty("ValidateConnection", "true");

   ods = new OracleDataSource();
   ods.setURL(URLCONN);
   ods.setUser(DEV_USR);
   ods.setPassword(DEV_PASSWORD);
   ods.setConnectionCachingEnabled(true);
   ods.setConnectionCacheName(CACHE_NAME);
   ods.setConnectionCacheProperties(cacheProps);
   conn = ods.getConnection();


Así estás limitando a 10 conexiones máximas.
Gracias lo probaré a ver si me vale, de momento cree el Pool con el DataSource de Apache, pero ya que la conexión es a Oracle lo haré con este.

Saludos
Buenas.

Necesito alguna "recomendación" para una cosa que tengo en mente.

Este año he empezado a programar Java en el ciclo superior de DAW. Tengo un amigo que también ha estudiado esto en la universidad y en verano queremos hacer algo pero no sabemos qué. Obviamente no buscamos hacer nada grande ni sacar beneficio. Queremos hacer algún proyectito juntos más que nada para practicar y seguir aprendiendo. El problema es que no se me ocurre nada.

¿Alguna idea sobre lo que podríamos hacer? ¿Hay algun proyecto open source por ahí para gente novata en Java pueda ir toqueteando cosas y demás?
Hola Compañeros! Requiero vuestra ayuda para una cosa muy tonta pero por mas que busco no lo encuentro.

En mi aplicación, genero unos excel automáticamente donde meto una imagen. Esa imagen esta en otro paquete pero no se como acceder a ella.

Es decir, no se que "ruta" debo poner para que coja la imagen correctamente....

Si lo hago con ruta de directorio no hay ningún problema pero no lo consigo cuando la intento cargar del otro paquete.....

Si alguien sabe como hacerlo se lo agradeceré enormemente

Un saludo y gracias :)
Alguien puede explicarme la diferencia entre una clase abstracta y un interfaz? por lo que entiendo la clase abstracta sirve para definir una estructura (métodos y atributos) sin implementar, que luego se implementan en las clases hijas en que sea necesario. Sobre la interfaz, entiendo que es básicamente lo mismo, pero que ademas un objeto puede tener varias interfaces, cosa que solo puede tener un método abstracto.

Alguien puede confirmarme si es correcto lo que he comentado y orientarme un poco mas en este tema?.
Ruxy escribió:Alguien puede explicarme la diferencia entre una clase abstracta y un interfaz? por lo que entiendo la clase abstracta sirve para definir una estructura (métodos y atributos) sin implementar, que luego se implementan en las clases hijas en que sea necesario. Sobre la interfaz, entiendo que es básicamente lo mismo, pero que ademas un objeto puede tener varias interfaces, cosa que solo puede tener un método abstracto.

Alguien puede confirmarme si es correcto lo que he comentado y orientarme un poco mas en este tema?.


en la clase abstracta puedes definir atributos
Entonces la diferencia es que en la clase abstracta puedes definir atributos y en una interfaz no?, no me cuadra mucho que la única diferencia sea esa, es un poco tontería entonces.
A grandes rasgos...

En una clase abstracta puedes:
- Definir atributos
- Definir métodos completos de los que luego puedes hacer uso y/o extender cuando heredas de esa clase.
- Definir declaraciones de métodos que luego han de implementar obligatoriamente las clases que heredan.

En una interfaz solo puedes definir declaraciones de métodos que luego han de implementar obligatoriamente las clases que implementen la interfaz.

Otra de las diferencias es que una clase únicamente puede heredar de otra clase (abstracta o no) mientras que puede implementar multiples interfaces. Las interfaces se suelen utilizar para definir comportamientos mientras que las clases abstractas se suelen utilizar para definir tipos y especificar luego en la clase que hereda.

Un saludo.
Que gran hilo!
la duda de las diferencia entre clases abstractas e interfaces tambien me surgio ami..
Yo ando intentando aprender de varios libros( dos de tutoriales sacados por internet, uno el de java 7 de anaya que me dejo un amigo, y java orientado a android que para mi es el mas dificil a la hora de explicar y entender, tuve que cojer una base con los otros).

El caso es que no pillo bien lo mas importante, las clases, los argumentos los metodos.. Me lio a la hora de llamarlos y de ver quien es quien, a ver si alguien me hace un croquis para tontos de su estructura(sin tanta explicacion teorica yo aprendo mas al verlo).
Por ejemplo un codigo sencillito a ver si alguien me es capaz de corregir por que estoy seguro de que son tonterias en su mayor parte mis dudas.

public class Arboles {

public Arboles() {
System.out.println("Un árbol genérico");
}

public Arboles(String tipo) {
System.out.println("Un árbol tipo " + tipo);
}

public Arboles(int altura) {
System.out.println("Un árbol de " + altura + " metros");
}

public Arboles(int altura,String tipo) {
System.out.println("Un " + tipo + " de " + altura + " metros");
}

public static void main(String args[]) {
Arboles arbol1 = new Arboles(4);
Arboles arbol2 = new Arboles("Roble");
Arboles arbol3 = new Arboles();
Arboles arbol4 = new Arboles(5,"Pino");
}
}

¿Primero de todo, desde el main(que esta en otra clase) como puedo llamar a esta clase, en principio creo que o es interface, o es heredada, o esta dentro del propio main?. Duda esencial...

Segunda duda, creo que segun los valores que le pongas te llama a un metodo u a otro, si por ejemplo llamas new Arboles (12, "pino") te coje la construccion que usa el int y el string, y entiendo que esa es la manera de diferenciarlas.

Tampoco acabo de entender el uso de this.
Creo que en el siguiente ejemplo basicamente diferencia entre la variable del class cableado, y la variable del constructor, lo que no bien entiendo es porque y en que se diferencia. Imagino que es util si hay varios constructores. O puede ser que este marcando el this.tipo (el tipo de ese constructor concreto) como un string igual que el que se inicio al iniciar la clase..

public Class Cableado {
int longitud;
String tipo;

public Cableado(String tipo, int longitud) {
this.tipo = tipo
this.longitud = longitud;
}

Mis dudas son basicamente en la programacion orientada a objetos como veis, de conceptos.. ¿sabeis algun tuto simplon con ejemplos supersencillos sobre esto? Es que me he quedado atascado por que no tengo claros los conceptos. Suelen venir ejemplos demasiado complejos con demasiados constructores clases y demas y me pierdo un poco.

no veo muy claro cuando tengo que crear una nueva clase y cuando tengo que dejar las cosas en el propio main... Por ejemplo he hecho un pequeño programa que hace unos calculos, y todo todo esta en el main, no le veia mucho sentido a crear clases para lo que son las operaciones, pero creo que es lo que deberia haber hecho.
No tengo claro aun que tengo que separar del main(claro estoy haciendo cosas muy sencillas).
Buenas

La primera duda que tienes en cuanto a lo del Main no se a que te refieres.

Pero el main de una clase es la función inicial que va a ejecutar.
También a lo de llamarse entre clases no es muy complicado para poder llamar a una funcion, metodo , propiedad, etc. Lo que tienes que hacer es definir un variable del tipo de la clase en si para así poder acceder a ella.

Por ejemplo si en tu clase arboles tienes un método así:

Public int sumar ( int num1, int num2) {
Int suma;
suma = num1 + num2;
return suma;

}


Para poder utilizar esta función desde el main de una clase lo que tienes que hacer como ya e dicho es crear una variable del tipo de la clase y luego utilizar la variable para acceder a sus métodos, funciones, etc y quedaria una cosa así:

Publicar class tururu {


public static void main(String args[]) {
Int numerosum;
Arboles arbol1 = new Arboles();
Numerosum = arbol1.sumar(3,5);

System.out.println(numerosum);

}

}


Siendo lo que esta en negrita la declaración de la variable que necesitamos para utilizar sus métodos.


Tu segunda duda en cuanto a los constructores es como dices según que le pases a la clase al iniciarla ira a un constructor o a otro.




Finalmente lo de this es una palabra se utiliza para referirse a si misma es decir a la clase ,esto es muy útil para no confundirse con las variables ya que al poner this. te saldrán los métodos ya definidos, propiedades, variables , etc definidos en esta siempre y cuando utilices un idea que haga eso como eclipse o netbeans xD.

En resumen el this es para referirse a si misma


Espero que haya sido claro y te sirva y si tienes alguna otra duda no dudes en preguntar
elenano2 escribió:Hola Compañeros! Requiero vuestra ayuda para una cosa muy tonta pero por mas que busco no lo encuentro.

En mi aplicación, genero unos excel automáticamente donde meto una imagen. Esa imagen esta en otro paquete pero no se como acceder a ella.

Es decir, no se que "ruta" debo poner para que coja la imagen correctamente....

Si lo hago con ruta de directorio no hay ningún problema pero no lo consigo cuando la intento cargar del otro paquete.....

Si alguien sabe como hacerlo se lo agradeceré enormemente

Un saludo y gracias :)



Me cito a mi mismo [+risas] ..nadie sabe como es la ruta para acceder a la imagen de otro paquete?

Gracias :)
muchísimas gracias birik voy a ponerme a practicarlo un poco pero justo es lo que buscaba, una explicación sencilla y efectiva :).
La duda que tenia es si el main puede "ver" todas las clases de su mismo paquete, o hay que hacer una referencia a esa clase en el sentido de importarla, de ponerla como interface o heredara.. Creo, que si que puede "ver" todas. Esta es una duda que me surgió al ver las heredadas y las interfaces, pero creo que lo lógico es que la clase principal pueda ver todas sin tener que llamar a las clases ensi.


Otra duda que tengo que me surgió al ver codigo es que aveces veo que el main es
public static void main(String[] args)
en lugar de
public static void main(String args[])

Lei que el "args" es un nombre realmente del tipo string(y por lo tanto podria ponerse otro), y no le veo la diferencia a hacerlo de una u otra manera. Aunque igual me estoy adelantando mucho(imagino que en los libros que estoy siguiendo se explicara). Pero soy un poco culo inquieto en estas cosas intento entender todo a la primera y con claridad.

Ahora voy a intentar hacer un clon del dopewars, no se si lo conoceis. Eso si supersencillo... y creando lo que son las ventanas botones y demas con el ide netbeans(pero aspiro a saber programar todo de 0, solo que me parece un reto bonito).
Un saludo y gracias por la paciencia.
Budathecat escribió:muchísimas gracias birik voy a ponerme a practicarlo un poco pero justo es lo que buscaba, una explicación sencilla y efectiva :).
La duda que tenia es si el main puede "ver" todas las clases de su mismo paquete, o hay que hacer una referencia a esa clase en el sentido de importarla, de ponerla como interface o heredara.. Creo, que si que puede "ver" todas. Esta es una duda que me surgió al ver las heredadas y las interfaces, pero creo que lo lógico es que la clase principal pueda ver todas sin tener que llamar a las clases ensi.


Otra duda que tengo que me surgió al ver codigo es que aveces veo que el main es
public static void main(String[] args)
en lugar de
public static void main(String args[])

Lei que el "args" es un nombre realmente del tipo string(y por lo tanto podria ponerse otro), y no le veo la diferencia a hacerlo de una u otra manera. Aunque igual me estoy adelantando mucho(imagino que en los libros que estoy siguiendo se explicara). Pero soy un poco culo inquieto en estas cosas intento entender todo a la primera y con claridad.

Ahora voy a intentar hacer un clon del dopewars, no se si lo conoceis. Eso si supersencillo... y creando lo que son las ventanas botones y demas con el ide netbeans(pero aspiro a saber programar todo de 0, solo que me parece un reto bonito).
Un saludo y gracias por la paciencia.

como si pones:
public static void main(String[] nombreQueMeDaLaRealGana)
o
public static void main(String nombreQueMeDaLaRealGana[])

nombreQueMeDaLaRealGana es el nombre del array donde se te pasa los valores en la llamada al arrancar el programa,
como cuando pones cls /? en cmd, /? se le pasa como cadena al programa en la consola (dos,bash), este procesa la peticion y hace lo que debe.

Lo importante es que si tu aplicacion no corre en un contenedor de aplicaciones, debe de tener un main,publico y estatico, que reciba un array de cadenas de texto(String), para que la maquina virtual de java sepa por donde empezar y donde volcar los datos(en c y c++ idem,bueno parecido, que estos si compilan de verdad), si lo corres en un contenedor (jboss,tomcat,etc), el propio contenedor tiene su main, con lo cual el se encarga.

por lo demas, ponlo como te resulte mas comodo(en mi caso lo dejo como lo genera el eclipse).

por ejemplo:

package Programas.Ejemplo1;

class HolaMundo {
    public static void main ( String[] nombreQueMeDaLaRealGana) {
        for(String valor:nombreQueMeDaLaRealGana){
            System.out.println(valor);
        }
    }
}


luego en la consola (cmd en ejecutar) compilamos:
C:> cd C:\WorkSpace
C:\WorkSpace>javac Programas\Ejemplo1\HolaMundo.java

luego ejecutamos:
C:\WorkSpace>java Programas.Ejemplo1.HolaMundo valores a pasar al programa

imprimirá:
valores
a
pasar
al
programa

que ha pasado?,al arrancar el programa le has pasado dicha cadena al programa, pero en lugar de pasarsela talcual la separa por los espacios y te la da en un array para que realices lo que sea necesario.

En el eclipse puedes poner estos parametros configurando la ejecución.


Respecto lo de la interfaz, una interfaz DEFINE lo que se debe de hacer en las clases, en un programa es lo que se debe de usar, una clase abstracta es una clase que no se puede instanciar, solo vale para heredarla, es como si fuera una maqueta de un edificio, te vale para realizar el edificio, pero no te puedes ir a vivir en el.Siempre y en todos los lenguajes se debe programar para interfaces(java,c,c++,c#,etc) es decir:


Esto esta bien:
    List<String> lista = new ArrayList<String>();
    //aqui operas con lista


Esto está fatal:
    ArrayList<String> lista = new ArrayList<String>();
    //operar con lista


el funcionamiento de la clase abstracta es diferente, tiene que ver mas con la parte de modelado de la aplicación.

En este libro viene muy bien esto:
The Practice of Programming
by Brian W. Kernighan and Rob Pike.


Saludos
Alguien sabe decirme como funciona el cifrado de números XOR? tengo que hacer un ejercicio que cifre y descifre un numero aplicando el método XOR, alguien puede decirme en que consiste el cifrado XOR o como tengo que hacerlo en java?, por lo que he leído cifrar es aplicar el método una vez y descifrar es volver a a aplicar el método XOR al número ya cifrado, pero no veo en que consiste el cifrado o como se hace.
Hola eolianos,

tengo una duda simple acerca de la exportación de mi proyecto a un .jar, ahora expongo el escenario:
Imágen proyecto: http://fotos.subefotos.com/c8bf1663cfe95fae46a22865038a0908o.jpg

Como se puede observar, utilizo el oracle jdbc para conectarme a mi DB para verificar que el usuario y el password son correctos.

DESDE ECLIPSE FUNCIONA Y DESDE EL .JAR NO!!!!

En la imágen se ve en la consola de ejecución de eclipse que el usuario Axel5 con password 1234 NO existe.

Ahora si exporto el .jar y lo ejecuto desde la linea de comandos tengo el siguiente error:

Exception in thread "main" java.lang.NullPointerException
at paqueton.Usuario.consultaUsuario(Usuario.java:14)
at paqueton.main.main(main.java:27)


Falla en la linea 14 de la clase Usuario:
Statement stmt = connection.createStatement();
Podéis ver la línea en la imágen

¿¿POR QUÉ??

Gracias! :)
Pues si funciona desde el eclipse y no al empaquetar a priori parece un problema de dependencias, asegurate que empaquetas las dependencias, o bien pon las dependencias (el jar del jdbc), junto con el jar que realizas y en el directorio correcto(copias la carpeta lib a donde tengas el jar).
Con maven o ant es mas facil, pero es ponerse a aprender otra cosa.

saludos, siento no poder haberte ayudado mas.
Ruxy escribió:Alguien sabe decirme como funciona el cifrado de números XOR? tengo que hacer un ejercicio que cifre y descifre un numero aplicando el método XOR, alguien puede decirme en que consiste el cifrado XOR o como tengo que hacerlo en java?, por lo que he leído cifrar es aplicar el método una vez y descifrar es volver a a aplicar el método XOR al número ya cifrado, pero no veo en que consiste el cifrado o como se hace.

Podeis orientarme con esto? necesito hacer el ejercicio, pero no entiendo como hacer lo del XOR.
Ruxy escribió:Podeis orientarme con esto? necesito hacer el ejercicio, pero no entiendo como hacer lo del XOR.


¿Has visto esto http://es.wikipedia.org/wiki/Cifrado_XOR?

Das pocos datos. Pero voy a intentar adivinar lo que necesitas.

Para cifrar necesitas un número y una clave. La clave supongo que será otro número.
Número:123456789
Clave:1234

Lo primero es rellenar con 0 el número por la izquierda para que su longitud se múltiplo de la clave. En este caso la clave tiene tamaño 4 y el número 9. Hay que añadir tres ceros.

La operación sería realizar la operación XOR, dígito a dígito, entre estos dos números:
000123456789
123412341234

Luego hay que operar posición a posición. Hay que tener cuidado porque el resultado puede darte un número mayor de 9.

He parido una clase que puede servirte de ayuda
public class XorCipher {
   
   private final String passStr;
   
   public XorCipher(int pass) {
      passStr = String.valueOf(pass);
   }
   
   public String cipher(long value) {
      // convertir el valor en una cadena para poder coger dígito a dígito
      String valueStr = String.valueOf(value);
      
      // rellenar con 0 por la izquierda
      int diff = valueStr.length() % passStr.length();
      if ( diff != 0 ) {
         for ( int i = 0; i < passStr.length() - diff; i++ ) {
            valueStr = '0' + valueStr;
         }
      }
      
      // cifrar dígito a dígito
      int[] resultArray = new int[valueStr.length()];
      for ( int i = 0; i < valueStr.length(); i++) {
         int left = Integer.valueOf(valueStr.substring(i, i+1));
         int right = Integer.valueOf(passStr.substring(i % passStr.length(), i % passStr.length() + 1));
         resultArray[i] =  left ^ right;
      }
      
      // crear el resultado concatenando
      String result = "";
      for ( int i = 0; i < resultArray.length; i++) {
         result += encodeHex(resultArray[i]);
      }
      return result;
   }
   
   public long decipher(String valueStr) {      
      // si la longitud del valor cifrado no es módulo de la clave -> error
      int diff = valueStr.length() % passStr.length();
      if ( diff != 0 ) {
         throw new ArithmeticException("Cadena a descifrar no válida");
      }
      
      // descifrar dígito a dígito
      int[] resultArray = new int[valueStr.length()];
      for ( int i = 0; i < valueStr.length(); i++) {
         int left = decodeHex(valueStr.substring(i, i+1));
         int right = Integer.valueOf(passStr.substring(i % passStr.length(), i % passStr.length() + 1));
         resultArray[i] =  left ^ right;
      }
      
      // crear el resultado multiplicando cada número en el array por 10 elevado a la posición - 1
      long result = 0;
      for ( int i = 0; i < resultArray.length; i++) {
         result += resultArray[i] * Math.pow(10, resultArray.length - i - 1);
      }
      return result;
   }
   
   private String encodeHex(int value) {
      if ( value == 10 ) return "A";
      else if ( value == 11 ) return "B";
      else if ( value == 12 ) return "C";
      else if ( value == 13 ) return "D";
      else if ( value == 14 ) return "E";
      else if ( value == 15 ) return "F";
      else return String.valueOf(value);   
   }
   
   private int decodeHex(String value) {
      if ( value.equals("A") ) return 10;
      else if ( value.equals("B") ) return 11;
      else if ( value.equals("C") ) return 12;
      else if ( value.equals("D") ) return 13;
      else if ( value.equals("E") ) return 14;
      else if ( value.equals("F") ) return 15;
      else return Integer.valueOf(value);
   }   

   public static void main(String[] args) {
      XorCipher cipher = new XorCipher(1234);
      long value = 123456789;
      String numCipher = cipher.cipher(value);
      long numDecipher = cipher.decipher(numCipher);
      System.out.println("original: " + value);
      System.out.println("cifrado: " + numCipher);
      System.out.println("descifrado: " + numDecipher);
   }
}
Una pregunta rapida compañeros,

Cual sería la ruta correcta para acceder a una imagen de un mismo paquete?

Por ejemplo si la imagen la tengo en otro paquete que se llama "images" seria: "images/icono.jpg"?
elenano2 escribió:Una pregunta rapida compañeros,

Cual sería la ruta correcta para acceder a una imagen de un mismo paquete?

Por ejemplo si la imagen la tengo en otro paquete que se llama "images" seria: "images/icono.jpg"?


prueba "./icono.jpg" o "icono.jpg"
Voy a probar lo primero que me has dicho que ese me falta jeje. Ahora te cuento :)

Gracias

EDIT:Nada, esa ruta me sigue sin valer....

Solo intento cargar una imagen en un excel que genero.


File imagen = new File("xxxxpc.png");
WritableImage imagenMoee = new WritableImage(0, 0, 5, 6,imagen);

Es muy fácil y si pongo un ruta " a pelo" me funciona sin problemas, pero al tener que cargarla desde el mismo paquete nanai....
Prueba con ClassLoader.getSystemResourceAsStream("paquete/icono.jpg") Eso te devuelve un InputStream que puedes transformar en un byte[] y pasárselo al WritableImage.

Prueba poniendo el paquete completo y con lo de "./xxx.png".

No estoy seguro de que puedas acceder a un recurso que esté en el classpath con File. Piensa que el fichero png puede estar empaquetado en un jar (es lo más normal). No tendría sentido acceder con un File porque no existe un fichero que contenga la imagen en el sistema. Sin embargo, con el ClassLoader puedes acceder al recurso porque lo que hace es abrir el jar y extraer la información del fichero comprimido que estás solicitando.

PD: las operaciones de IO son las que más dan por culo.
AxL_ escribió:Hola eolianos,

tengo una duda simple acerca de la exportación de mi proyecto a un .jar, ahora expongo el escenario:
Imágen proyecto: http://fotos.subefotos.com/c8bf1663cfe95fae46a22865038a0908o.jpg

Como se puede observar, utilizo el oracle jdbc para conectarme a mi DB para verificar que el usuario y el password son correctos.

DESDE ECLIPSE FUNCIONA Y DESDE EL .JAR NO!!!!

En la imágen se ve en la consola de ejecución de eclipse que el usuario Axel5 con password 1234 NO existe.

Ahora si exporto el .jar y lo ejecuto desde la linea de comandos tengo el siguiente error:

Exception in thread "main" java.lang.NullPointerException
at paqueton.Usuario.consultaUsuario(Usuario.java:14)
at paqueton.main.main(main.java:27)


Falla en la linea 14 de la clase Usuario:
Statement stmt = connection.createStatement();
Podéis ver la línea en la imágen

¿¿POR QUÉ??

Gracias! :)


No está encontrando el jar del driver de oracle, pon ese jar en el mismo sitio que el jar exportado, asegurate que el manifest del jar exportado es correcto, y ejecuta el jar con java -jar -cp "directorio del classpath" nombredeljar

Saludos
chinos4ever escribió:
Ruxy escribió:Podeis orientarme con esto? necesito hacer el ejercicio, pero no entiendo como hacer lo del XOR.


¿Has visto esto http://es.wikipedia.org/wiki/Cifrado_XOR?

Das pocos datos. Pero voy a intentar adivinar lo que necesitas.

Para cifrar necesitas un número y una clave. La clave supongo que será otro número.
Número:123456789
Clave:1234

Lo primero es rellenar con 0 el número por la izquierda para que su longitud se múltiplo de la clave. En este caso la clave tiene tamaño 4 y el número 9. Hay que añadir tres ceros.

La operación sería realizar la operación XOR, dígito a dígito, entre estos dos números:
000123456789
123412341234

Luego hay que operar posición a posición. Hay que tener cuidado porque el resultado puede darte un número mayor de 9.

He parido una clase que puede servirte de ayuda


Gracias, pero ese ejercicio es algo mas complicado de lo que yo quiero hacer, hay cosas que aun no he visto y no se para que sirven, aun así me voy a mirar el codigo poco a poco a ver si me aclaro con la parte del cifrado.

Por si te sirve, te dejo el enunciado del ejercicio para que te hagas una idea de lo pide el ejercicio.


Desarrollar una aplicación de cifrado de códigos numéricos.

El cifrador recibirá un código numérico y una implementación de un algoritmo de cifrado/descifrado y la orden de cifrar o descifrar el código.

Existen distintos algoritmos:

•   Multiplicar por un número determinado.

•   Diferencia existente a un número determinado.

•   El XOR con un número determinado.

Desarrollar la clase Actividad5 que en su método main cree un cifrador, y le pida cifrar y descifrar varios códigos usando distintos algoritmos de encriptación.

Nota: aunque el ejercicio se puede resolver con clases abstractas, usar interfaces.

769 respuestas