Home UC3M Universidad Carlos III de Madrid - Departamento de Ingeniería Telemática Home IT
Localización | Personal | Docencia | Investigación | Novedades | Intranet  

Respuestas a problemas frecuentes

Objetivo de esta página

En esta página se irán publicando soluciones a problemas frecuentes que surjan en la realización de las prácticas de la asignatura.

Secciones

Java

Compilación y ejecución de aplicaciones Java con paquetes desde línea de comandos.

Fecha de publicación: 19-11-2007

Cuando una aplicación Java está organizada en paquetes, se recomienda seguir el siguiente procedimiento para compilarla y ejecutarla.

El código fuente debe estar organizado en directorios y subdirectorios de acuerdo al paquete al cual pertenezca cada clase. El siguiente ejemplo muestra una posible distribución del código de la aplicación:

noticiasswing/
    |
    |---src/
    |   |
    |   |---beans/
    |   |   |
    |   |   |---Noticia.java
    |   |   |---Usuario.java
    |   |
    |   |---interfaz/
    |       |
    |       |---VentanaPrincipal.java
    |       |---DialogoNuevaNoticia.java
    |       |---votaciones/
    |           |
    |           |---VerVotacion.java 
    |
    |---lib/
    |   |
    |   |---mysql-connector.jar
    |
    |---classes/

Las clases Noticia y Usuario están, en el ejemplo, en el paquete beans. Las clases VentanaPrincipal y DialogoNuevaNoticia, en el paquete interfaz. La clase VerVotacion está en el paquete interfaz.votaciones.

Es recomendable generar las clases compiladas en un directorio distinto al que almacena el código fuente. Para ello, debe compilarse de la siguiente forma, desde dentro del directorio noticiasswing/src:

javac -cp ../lib/mysql-connector.jar:../classes -d ../classes beans/*.java interfaz/*.java interfaz/votaciones/*.java

Si se ejecuta el comando javac sin parámetros, este indica qué significa cada una de las opciones anteriores.

Una vez compilado, los ficheros compilados (.class) aparecen automáticamente en el directorio classes, organizados en subdirectorios de acuerdo al paquete al cual pertenezcan:

noticiasswing/
    |
    |---src/
    |   |
    |   |---beans/
    |   |   |
    |   |   |---Noticia.java
    |   |   |---Usuario.java
    |   |
    |   |---interfaz/
    |       |
    |       |---VentanaPrincipal.java
    |       |---DialogoNuevaNoticia.java
    |       |---votaciones/
    |           |
    |           |---VerVotacion.java 
    |
    |---lib/
    |   |
    |   |---mysql-connector.jar
    |
    |---classes/
        |
        |---beans/
        |   |
        |   |---Noticia.class
        |   |---Usuario.class
        |
        |---interfaz/
            |
            |---VentanaPrincipal.class
            |---DialogoNuevaNoticia.class
            |---votaciones/
                |
                |---VerVotacion.class

Suponiendo que la clase VentanaPrincipal tuviese el método main, se ejecutaría de la siguiente forma, desde el directorio noticiasswing/src (se puede cambiar el directorio actualizando convenientemente las rutas relativas en el comando):

java -cp ../lib/mysql-connector.jar:../classes interfaz.VentanaPrincipal

MySQL

Inserción de datos en campos con autoincremento con el conector MySQL Connector/J 5.0.4 y tablas InnoDB.

Fecha de publicación: 10-11-2006

Aunque MySQL lo permite, no se debe, en principio, establecer directamente, en una consulta de inserción de una nueva fila, un valor para un identificador declarado como AUTO_INCREMENT. Es más sencillo y seguro dejar que MySQL calcule automáticamente dicho identificador.

Tal y como se indica en el manual de referencia de MySQL 5.0, el gestor de bases de datos MySQL calculará e introducirá automáticamente un identificador declarado como AUTO_INCREMENT en tablas InnoDB si en la sentencia INSERT se proporciona NULL o 0 como valor de dicho campo.

A pesar de que las dos opciones anteriores funcionan correctamente desde el cliente de línea de comandos mysql, el conector MySQL Connector/J 5.0.4 no permite proporcionar un valor NULL a un campo AUTO_INCREMENT. Por tanto, la única opción es introducir el valor '0' en consultas INSERT realizadas desde la aplicación Java con este conector. Por ejemplo:

insert into Tecnico values ('0','José García','jose','miclave','910000000');

En el ejemplo anterior, el gestor de bases de datos calculará automáticamente cuál es el siguiente identificador libre y lo asignará al campo 'idTecnico'.

Swing

Cómo mostrar la cabecera en una tabla JTable.

Fecha de publicación: 23-11-2006

La forma más sencilla y recomendable de que se muestre la cabecera de una tabla JTable consiste en insertar la tabla dentro de un componente JScrollPane. Este se encarga automáticamente de mostrar la cabecera:

JScrollPane scrollPane = new JScrollPane(table);
table.setPreferredScrollableViewportSize(new Dimension(500, 70));

La otra alternativa (sin JScrollPane) consiste en obtener una referencia a la cabecera de la tabla con el método JTable.getTableHeader() e insertarla en el contenedor que se esté utilizando, como si fuese un componente más:

container.setLayout(new BorderLayout());
container.add(table.getTableHeader(), BorderLayout.PAGE_START);
container.add(table, BorderLayout.CENTER);