Buscar
Social
Ofertas laborales ES

Foro sobre Java SE > Error al generar applet RuntimeException

Hola compañeros, un saludo a todos, vengo por estos rumbos porque necesito de su ayuda y experiencia, habitualmente no utilizo java, me enfoco mas en PHP y otros, pero tengo que hacer un sistema de control biometrico y para controlar el hardware necesito desarrollar un applet en java.

Ya tengo el código y si lo pruebo en netbeans funciona, pero al generar el jar y cargar el applet en un html, me da un error y no se como solucionarlo, el mensaje es el siguiente:


RuntimeException
java.lang.ExceptionInInitializerError

Espero puedan ayudarme, dejo el codigo de archivo principal para que puedan ver si alli tengo algun error:


/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package formularioApplet;

//import BaseDatos.ConexionBD;
import BaseDatos.ConexionBD;
import com.digitalpersona.onetouch.DPFPDataPurpose;
import com.digitalpersona.onetouch.DPFPFeatureSet;
import com.digitalpersona.onetouch.DPFPGlobal;
import com.digitalpersona.onetouch.DPFPSample;
import com.digitalpersona.onetouch.DPFPTemplate;
import com.digitalpersona.onetouch.capture.DPFPCapture;
import com.digitalpersona.onetouch.capture.event.DPFPDataAdapter;
import com.digitalpersona.onetouch.capture.event.DPFPDataEvent;
import com.digitalpersona.onetouch.capture.event.DPFPErrorAdapter;
import com.digitalpersona.onetouch.capture.event.DPFPErrorEvent;
import com.digitalpersona.onetouch.capture.event.DPFPReaderStatusAdapter;
import com.digitalpersona.onetouch.capture.event.DPFPReaderStatusEvent;
import com.digitalpersona.onetouch.capture.event.DPFPSensorAdapter;
import com.digitalpersona.onetouch.capture.event.DPFPSensorEvent;
import com.digitalpersona.onetouch.processing.DPFPEnrollment;
import com.digitalpersona.onetouch.processing.DPFPFeatureExtraction;
import com.digitalpersona.onetouch.processing.DPFPImageQualityException;
import com.digitalpersona.onetouch.verification.DPFPVerification;
import com.digitalpersona.onetouch.verification.DPFPVerificationResult;
import java.awt.Image;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.logging.Level;
import static java.util.logging.Level.SEVERE;
import java.util.logging.Logger;
import javax.swing.ImageIcon;
import javax.swing.JOptionPane;
import javax.swing.SwingUtilities;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;

/**
*
* @author Samo
*/
public class CapturaHuellaApplet extends javax.swing.JApplet {

/**
* Initializes the applet CapturaHuellaApplet
*/
@Override
public void init() {
Iniciar();
/* Set the Nimbus look and feel */
//<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) ">
/* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel.
* For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html
*/
try {
for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
if ("Nimbus".equals(info.getName())) {
javax.swing.UIManager.setLookAndFeel(info.getClassName());
break;
}
}
} catch (ClassNotFoundException ex) {
java.util.logging.Logger.getLogger(CapturaHuellaApplet.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
} catch (InstantiationException ex) {
java.util.logging.Logger.getLogger(CapturaHuellaApplet.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
} catch (IllegalAccessException ex) {
java.util.logging.Logger.getLogger(CapturaHuellaApplet.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
} catch (javax.swing.UnsupportedLookAndFeelException ex) {
java.util.logging.Logger.getLogger(CapturaHuellaApplet.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
}
//</editor-fold>

/* Create and display the applet */
try {
java.awt.EventQueue.invokeAndWait(new Runnable() {
public void run() {
initComponents();
}
});
} catch (Exception ex) {
ex.printStackTrace();
}
}

//Atributos necesarios para el manejo de huellas digitales
private DPFPCapture Lector = DPFPGlobal.getCaptureFactory().createCapture();
private DPFPEnrollment Reclutador = DPFPGlobal.getEnrollmentFactory().createEnrollment();
private DPFPVerification Verificador = DPFPGlobal.getVerificationFactory().createVerification();
private DPFPTemplate template;
public static String TEMPLATE_PROPERTY = "template";
public DPFPFeatureSet featuresinscripcion;
public DPFPFeatureSet featuresverificacion;

ConexionBD con = new ConexionBD();

//Metodo que ejecuta todas las acciones del lector de huellas
protected void Iniciar(){
Lector.addDataListener (new DPFPDataAdapter(){
@Override public void dataAcquired(final DPFPDataEvent e){
SwingUtilities.invokeLater(new Runnable(){
@Override public void run(){
EnviarTexto("La huella digital ha sido capturada");
ProcesarCaptura(e.getSample());
}
});
}
});

Lector.addReaderStatusListener(new DPFPReaderStatusAdapter(){
@Override public void readerConnected(final DPFPReaderStatusEvent e){
SwingUtilities.invokeLater(new Runnable(){
@Override public void run(){
EnviarTexto("El sensor de huella digital esta activado o conectado");
}
});
}
@Override public void readerDisconnected(final DPFPReaderStatusEvent e){
SwingUtilities.invokeLater(new Runnable(){
@Override public void run(){
EnviarTexto("El sensor de huella dibgital esta desactivado o no conectado");
}
});
}
});

Lector.addSensorListener(new DPFPSensorAdapter(){
@Override public void fingerTouched(final DPFPSensorEvent e){
SwingUtilities.invokeLater(new Runnable(){
@Override public void run(){
EnviarTexto("El dedo ha sido colocado sobre el lectorde de huellas");
}
});
}
@Override public void fingerGone(final DPFPSensorEvent e){
SwingUtilities.invokeLater(new Runnable(){
@Override public void run(){
EnviarTexto("El dedo ha sido quitado del lector de huellas");
}
});
}
});

Lector.addErrorListener(new DPFPErrorAdapter(){
public void errorReader(final DPFPErrorEvent e){
SwingUtilities.invokeLater(new Runnable(){
@Override public void run(){
EnviarTexto("Error: "+e.getError());
}
});
}
});
} //Fin metodo iniciar

//Aqui se obtiene la informacion de la huella dgital
public DPFPFeatureSet extraerCaracteristicas(DPFPSample sample, DPFPDataPurpose purpose){
DPFPFeatureExtraction extractor = DPFPGlobal.getFeatureExtractionFactory().createFeatureExtraction();

try{
return extractor.createFeatureSet(sample, purpose);
} catch(DPFPImageQualityException e){
return null;
}
}

public void ProcesarCaptura(DPFPSample sample){
featuresinscripcion = extraerCaracteristicas(sample, DPFPDataPurpose.DATA_PURPOSE_ENROLLMENT);
featuresverificacion = extraerCaracteristicas(sample, DPFPDataPurpose.DATA_PURPOSE_VERIFICATION);

if (featuresinscripcion != null)
try{
System.out.println("Las caracteristicas de la huella");
Reclutador.addFeatures(featuresinscripcion);

Image image = CrearImagenHuella(sample);
DibujarHuella(image);

// BtnVerificar.setEnabled(true);
// BtnIdentificar.setEnabled(true);

}catch(DPFPImageQualityException ex){
System.err.println("Error: "+ex.getMessage());
}finally{
EstadoHuellas();

switch(Reclutador.getTemplateStatus()){
case TEMPLATE_STATUS_READY:
stop();
setTemplate(Reclutador.getTemplate());
EnviarTexto("La plantilla de la huella ha sido creada, ya puede verificarla o identificarla");
// btnIdentificar.setEnabled(false);
// btnVerificar.setEnabled(false);
btnGuardar.setEnabled(true);
btnGuardar.grabFocus();
break;

case TEMPLATE_STATUS_FAILED:
Reclutador.clear();
stop();
EstadoHuellas();
setTemplate(null);
// JOptionPane.showMessageDialog(CapturaHuellaApplet.this, "La plantilla de la huella no pudo ser creada, repita el proceso.");
start();
break;
}
}
}

public Image CrearImagenHuella(DPFPSample sample){
return DPFPGlobal.getSampleConversionFactory().createImage(sample);
}

public void DibujarHuella(Image image){
lblImagenHuella.setIcon(new ImageIcon(
image.getScaledInstance(lblImagenHuella.getWidth(),
lblImagenHuella.getHeight(),
image.SCALE_DEFAULT
)
));
repaint();
}

public void EstadoHuellas(){
EnviarTexto("Muestra de huellas necesarias para guardar template "+Reclutador.getFeaturesNeeded());
}

public void EnviarTexto(String string){
txtArea.append(string + "\n");
}

public void start(){
Lector.startCapture();
EnviarTexto("Utilizando el lector de huella dactilar");
}

public void stop(){
Lector.stopCapture();
EnviarTexto("No se esta usando el lector de huella dactilar");
}

public DPFPTemplate getTemplate(){
return template;
}

public void setTemplate(DPFPTemplate template){
DPFPTemplate old = this.template;
this.template = template;
firePropertyChange(TEMPLATE_PROPERTY, old, template);
}

public void guardarHuella() throws SQLException{
ByteArrayInputStream datosHuella = new ByteArrayInputStream(template.serialize());
Integer tamanoHuella = template.serialize().length;
String nombre = JOptionPane.showInputDialog("Nombre:");

try{
Connection cn = con.conectar();
PreparedStatement guardarStmt = cn.prepareStatement("INSERT INTO somhue(huenombre,huehuella) values (?,?)");
guardarStmt.setString(1,nombre);
guardarStmt.setBinaryStream(2, datosHuella, tamanoHuella);
guardarStmt.execute();
guardarStmt.close();
JOptionPane.showMessageDialog(null, "Huella guardada correctamente");
con.desconectar();
btnGuardar.setEnabled(false);
//btnVerificar.grabFocus();
}catch(SQLException ex){
System.err.println("Error al guardar los datos de la huella.");
}finally{
con.desconectar();
}
}

public CapturaHuellaApplet() {
/* try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (Exception e) {
JOptionPane.showMessageDialog(null, "Imposible modificar el tema visual", "Lookandfeel invalido.",
JOptionPane.ERROR_MESSAGE);
}

initComponents();*/
}//*/

/**
* This method is called from within the init() method to initialize the
* form. WARNING: Do NOT modify this code. The content of this method is
* always regenerated by the Form Editor.
*/
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">
private void initComponents() {

jPanel1 = new javax.swing.JPanel();
lblImagenHuella = new javax.swing.JLabel();
jPanel2 = new javax.swing.JPanel();
btnGuardar = new javax.swing.JButton();
jScrollPane1 = new javax.swing.JScrollPane();
txtArea = new javax.swing.JTextArea();

jPanel1.setBorder(javax.swing.BorderFactory.createTitledBorder(new javax.swing.border.SoftBevelBorder(javax.swing.border.BevelBorder.RAISED), "Huella digital", javax.swing.border.TitledBorder.CENTER, javax.swing.border.TitledBorder.DEFAULT_POSITION));

javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1);
jPanel1.setLayout(jPanel1Layout);
jPanel1Layout.setHorizontalGroup(
jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel1Layout.createSequentialGroup()
.addGap(23, 23, 23)
.addComponent(lblImagenHuella, javax.swing.GroupLayout.PREFERRED_SIZE, 340, javax.swing.GroupLayout.PREFERRED_SIZE)
.addContainerGap(22, Short.MAX_VALUE))
);
jPanel1Layout.setVerticalGroup(
jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel1Layout.createSequentialGroup()
.addContainerGap()
.addComponent(lblImagenHuella, javax.swing.GroupLayout.DEFAULT_SIZE, 231, Short.MAX_VALUE)
.addContainerGap())
);

jPanel2.setBorder(new javax.swing.border.SoftBevelBorder(javax.swing.border.BevelBorder.RAISED));

btnGuardar.setText("Guardar huella");
btnGuardar.setEnabled(false);
btnGuardar.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
btnGuardarActionPerformed(evt);
}
});

javax.swing.GroupLayout jPanel2Layout = new javax.swing.GroupLayout(jPanel2);
jPanel2.setLayout(jPanel2Layout);
jPanel2Layout.setHorizontalGroup(
jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel2Layout.createSequentialGroup()
.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(btnGuardar)
.addGap(143, 143, 143))
);
jPanel2Layout.setVerticalGroup(
jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel2Layout.createSequentialGroup()
.addGap(24, 24, 24)
.addComponent(btnGuardar)
.addContainerGap(25, Short.MAX_VALUE))
);

txtArea.setColumns(20);
txtArea.setRows(5);
jScrollPane1.setViewportView(txtArea);

javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jPanel2, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(jScrollPane1)
.addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
.addContainerGap())
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(jPanel2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 122, Short.MAX_VALUE))
);
}// </editor-fold>

private void btnGuardarActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
try{
guardarHuella();
Reclutador.clear();
lblImagenHuella.setIcon(null);
start();
}catch(SQLException ex){
Logger.getLogger(CapturaHuellaApplet.class.getName()).log(Level.SEVERE,null,ex);
}
}


// Variables declaration - do not modify
private javax.swing.JButton btnGuardar;
private javax.swing.JPanel jPanel1;
private javax.swing.JPanel jPanel2;
private javax.swing.JScrollPane jScrollPane1;
private javax.swing.JLabel lblImagenHuella;
private javax.swing.JTextArea txtArea;
// End of variables declaration
}

agosto 23, 2017 | Unregistered CommenterPablo

Esa excepción proviene de una declaración "static", que lanza una excepción durante su inicialización.

https://docs.oracle.com/javase/7/docs/api/java/lang/ExceptionInInitializerError.html

La traza de la excepción te indica en qué clase y línea de tu código se ha lanzado.

agosto 24, 2017 | Registered Commenterchoces

Choces, gracias por tu respuesta, me queda un poco mas claro, pero no me muestra donde esta el error exactamente, pero haciendo pruebas me di cuenta que sucede en la declaracion de las variables


private DPFPEnrollment Reclutador = DPFPGlobal.getEnrollmentFactory().createEnrollment();
private DPFPVerification Verificador = DPFPGlobal.getVerificationFactory().createVerification();

pero no se como se soluciona eso, ya busque por todos lados y no he encontrado como solucionarlo, alguna idea?

agosto 24, 2017 | Unregistered CommenterPablo

No les asignes un valor mediante un método en su declaración.
Haz esas asignaciones en el constructor de la clase, y usa try..catch para ver quién y por qué lanza la excepción.

agosto 24, 2017 | Registered Commenterchoces

Gracias, lo voy a intentar ahorita.

agosto 24, 2017 | Unregistered CommenterPablo

Choces, intente lo que me dijiste pero no me funciona, podria enviarte mi código y me das una mano, realmente necesito resolvere ese problema, puedo escribirte a hangouts? mi correo es pabloenrique.sam@gmail.com.

agosto 24, 2017 | Registered Commenterpablosam

Hola, pablosam o pablo.
Con que versión de jdk estas haciendo tu programa; apartir de Java 7 Update 65 y Java 8 dejaron de funcionar los JApplets por razones de seguridad.
ejemplo de huella digital con java
ejemplo de huella digital con C#
Hay o Había un sdk llamado Kit Desarrollo Apps ZK BiokeySDK para php y otros leguajes, pero tiene un costo

Vinculo a la página del sdk para php
Ojala que te sea útil.

agosto 30, 2017 | Unregistered CommenterScribeSinFin