Professional Documents
Culture Documents
Despus de publicar esta nueva entrega de la programacin de un lector de huella digital con JAVA
y mySQL.
Para el desarrollo del proyecto, utilic el IDE para programar en Java de Oracle, llamado NetBeans
7.1
Como pueden observar, nuestro proyecto se llama Lector de Huellas y consta de tres clases, y cada
una de stas (las clases) tiene su respectiva funcin dentro del proyecto:
Clase Interfaz
/**
* @package: interfaz
* @class: PantallaPrincipal
* @author: Ricardo Rosero
* @version: 1.0
*/
package interfaz;
/**
* @librerias importadas
*/
import com.griaule.grfingerjava.GrFingerJavaException;
import java.awt.Graphics;
import java.awt.Insets;
import java.awt.image.BufferedImage;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JComponent;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.UIManager;
import javax.swing.border.BevelBorder;
import javax.swing.border.CompoundBorder;
import javax.swing.border.EmptyBorder;
import procedimientos.Util;
/**
* @atributos
* @access: private
*/
/**
* @function: PantallaPrincipal
* @access: public
* @return
*/
public PantallaPrincipal() {
inicializar();
initComponents();
procedimientosSDK.inicializarCaptura();
setLocationRelativeTo(null);
setVisible(true);
/**
* @function: inicializar
* @access: public
* @return
*/
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
catch (Exception e) {
/**
* @function: crearPanelHuella
* @access: private
* @return
*/
super.paintComponent(g);
if (fingerprintImage!=null) {
//Calcula el tamao y posicin de la imagen para ser pintada el tamao es ajustado para que
ocupe todo el tamao del panel
};
fingerprintViewPanel.setBorder(new CompoundBorder (
new BevelBorder(BevelBorder.LOWERED)));
if(fingerprintViewPanel==null){
System.exit(1);
return null;
else{
return fingerprintViewPanel;
/**
* @function: showImage
* @access: public
* @return
*/
repaint();
/**
* @function: initComponents
* @access: private
* @return
*/
@SuppressWarnings(unchecked)
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
setResizable(false);
addWindowListener(new java.awt.event.WindowAdapter() {
formWindowActivated(evt);
formWindowClosing(evt);
}
});
jPanel2.setBorder(javax.swing.BorderFactory.createTitledBorder(new
javax.swing.border.SoftBevelBorder(javax.swing.border.BevelBorder.RAISED), Acciones,
javax.swing.border.TitledBorder.CENTER, javax.swing.border.TitledBorder.DEFAULT_POSITION));
btnIdentificar.setText(Identificar);
btnIdentificar.addActionListener(new java.awt.event.ActionListener() {
btnIdentificarActionPerformed(evt);
});
btnGuardar.setText(Guardar);
btnGuardar.addActionListener(new java.awt.event.ActionListener() {
btnGuardarActionPerformed(evt);
});
btnSalir.setText(Salir);
btnSalir.setAlignmentY(0.0F);
btnSalir.addActionListener(new java.awt.event.ActionListener() {
btnSalirActionPerformed(evt);
});
jPanel2Layout.setHorizontalGroup(
jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel2Layout.createSequentialGroup()
.addContainerGap()
.addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel2Layout.createSequentialGroup()
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED,
javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addContainerGap())
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel2Layout.createSequentialGroup()
.addGap(0, 0, Short.MAX_VALUE)
);
jPanel2Layout.setVerticalGroup(
jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel2Layout.createSequentialGroup()
.addContainerGap()
.addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addComponent(btnSalir, javax.swing.GroupLayout.PREFERRED_SIZE, 35,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
);
PanelContenedor.setLayout(new java.awt.BorderLayout());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
.addGap(0, 0, Short.MAX_VALUE)
.addGroup(layout.createSequentialGroup()
.addComponent(jPanel2, javax.swing.GroupLayout.DEFAULT_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addContainerGap())
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(jPanel2, javax.swing.GroupLayout.PREFERRED_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
);
PanelContenedor.getAccessibleContext().setAccessibleParent(jPanel2);
pack();
}// </editor-fold>
/**
* @function: btnGuardarActionPerformed
* @access: private
* @return
*/
try {
//procedimientosSDK.guardarHuella();
//procedimientosSDK.guardarHuellaBackup();
procedimientosSDK.guardar();
/**
* @function: btnSalirActionPerformed
* @access: private
* @return
*/
private void btnSalirActionPerformed(java.awt.event.ActionEvent evt) {
dispose();
/**
* @function: formWindowActivated
* @access: private
* @return
*/
this.PanelContenedor.add(this.crearPanelHuella());
/**
* @function: formWindowClosing
* @access: private
* @return
*/
/**
* @function: btnIdentificarActionPerformed
* @access: private
* @return
*/
procedimientosSDK.identificarPersona();
/**
* @atributos
* @access: private
*/
Clase Procedimientos
/**
* @package: procedimientos
* @class: Util
* @version: 1.0
*/
package procedimientos;
/**
* @librerias importadas
*/
import com.griaule.grfingerjava.FingerprintImage;
import com.griaule.grfingerjava.GrFingerJava;
import com.griaule.grfingerjava.GrFingerJavaException;
import com.griaule.grfingerjava.IFingerEventListener;
import com.griaule.grfingerjava.IImageEventListener;
import com.griaule.grfingerjava.IStatusEventListener;
import com.griaule.grfingerjava.MatchingContext;
import com.griaule.grfingerjava.Template;
import com.mysql.jdbc.Blob;
import interfaz.PantallaPrincipal;
import java.io.ByteArrayInputStream;
import java.io.File;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import javax.swing.JOptionPane;
import java.io.InputStream;
* @atributos
*/
/** Arreglo que contiene localmente los datos de las huellas capturadas */
* @function: Util
* @access: public
* @return
*/
this.ui = ui;
initDB();
/**
* @function: inicializarCaptura
* @access: public
* @return:
*/
try {
GrFingerJava.initializeCapture(this);
catch (Exception e) {
//Si ocurre un error durante la inicializacin se indica con un mensaje y se cierra la aplicacin.
e.printStackTrace();
System.exit(1);
}
/**
* @function: initDB
* @access: private
* @return
*/
try {
Class.forName(com.mysql.jdbc.Driver);
//Se conecta a la bd
dbConnection = DriverManager.getConnection(jdbc:mysql://localhost:3306/huellas,root,
rrosero1980);
catch (Exception e) {
e.printStackTrace();
/**
* @function: destroyDB
* @access: private
* @return
*/
try {
guardarStmt.close();
identificarStmt.close();
dbConnection.close();
catch (Exception e) {
e.printStackTrace();
/**
* @function: setFingerprintSDKNativeDirectory
* @author: Ricardo Rosero
* @access: public
* @return
*/
try {
GrFingerJava.setNativeLibrariesDirectory(directory);
GrFingerJava.setLicenseDirectory(directory);
catch (GrFingerJavaException e) {
e.printStackTrace();
/**
* @function: onSensorPlug
* @access: public
* @return
*/
try {
catch (GrFingerJavaException e) {
e.printStackTrace();
}
/**
* @function: onSensorUnPlug
* @access: public
* @return
*/
try {
GrFingerJava.stopCapture(idSensor);
catch (GrFingerJavaException e) {
e.printStackTrace();
/**
* @function: onImageAcquired
* @access: public
* @return
*/
this.fingerprint=huellaDigital;
extract();
/**
* @function: extrac
* @access: public
* @return
*/
try {
template = fingerprintSDK.extract(fingerprint);
ui.showImage(GrFingerJava.getBiometricImage(template,fingerprint));
catch (GrFingerJavaException e) {
e.printStackTrace();
/**
* @function: guardar
* @access: public
* @return
* @throws: GrFingerJavaException
*/
fingerprintDataLength = template.getData().length;
try{
verificaCedulaHuellaUsuario.setInt(1, Integer.parseInt(cedula));
ResultSet rs = verificaCedulaHuellaUsuario.executeQuery();
if(rs.next()){
coinciden = fingerprintSDK.verify(template,referenceTemplate);
if(coinciden){
else{
guardar2.setInt(2, Integer.parseInt(cedula));
guardar2.execute();
else if(!rs.next()){
String nombre = JOptionPane.showInputDialog(Nombre y Apellido:);
guardarStmt.setInt(1,Integer.parseInt(cedula));
guardarStmt.setString(2,nombre);
guardarStmt.execute();
catch(SQLException sqlEx){
sqlEx.printStackTrace();
/**
* @function: onFingerDown
* @access: public
* @return
*/
/**
* @function: onFingerUp
* @access: public
* @return
*/
public void onFingerUp(String arg0) {
/**
* @function: onFingerUp
* @access: public
* @return
* @throws: GrFingerJavaException
*/
try{
while(rsIdentificar.next()){
if(referenceTemplate!=null){
//Si encuentra correspondencia dibuja el mapa e indica el nombre de la persona que coincidi.
if (coinciden){
JOptionPane.showMessageDialog(null, Bienvenido
+rsIdentificar.getString(nombres_usuario));
return;
}
//Si no encuentra alguna huella que coincida lo indica con un mensaje
catch (SQLException e) {
e.printStackTrace();
catch(GrFingerJavaException gr){
gr.printStackTrace();
Cabe recordar que esta clase es la ms importante de todas, debido a que en esta clase
procedemos a conectar nuestro sistema de autenticacion con el motor de bases de datos mySQL.
Clase LectorHuella
Esta clase es la ms sencilla de todas, y contiene el archivo Main.java , la funcin de esta clase es
simple, se encarga de ejecutar nuestro programa, y su estructura es la siguiente:
/**
* @package: lectorhuellas
* @class: Main
* @version: 1.0
*/
package lectorhuellas;
/**
* @librerias importadas
*/
import interfaz.PantallaPrincipal;
import java.io.File;
import procedimientos.Util;
/**
* @function: main
* @access: public
* @return
*/
Util.setFingerprintSDKNativeDirectory(grFingerNativeDirectory);
Host: 127.0.0.1
CREATE DATABASE IF NOT EXISTS `huellas` /*!40100 DEFAULT CHARACTER SET latin1 */;
USE `huellas`;