Buscar

DP APS 6º SEMESTRE

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 82 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 82 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 82 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

5
81
UNIVERSIDADE PAULISTA – UNIP
Bruno Alves Comitre RA: B39434-0
Diogo Vieira da Silva RA: B4648H-6
Luiz Eduardo Santos Alves RA: B308AA-2
TRABALHO ATIVIDADES PRÁTICAS SUPERVISIONADAS
SOROCABA
2015
Bruno Alves Comitre RA: B39434-0
Diogo Vieira da Silva RA: B4648H-6
Luiz Eduardo Santos Alves RA: B308AA-2
DESENVOLVIMENTO DE UM SISTEMA DE 
	 IDENTIFICAÇÃO E AUTENTICAÇÃO BIOMÉTRICA
Trabalho para composição de notas apresentado à Universidade Paulista - UNIP, referente dependência da disciplina de Atividades Práticas Supervisionadas.
	Prof. Orientador: Me. Glaucio Celso Luz
SOROCABA
2015
RESUMO
Este trabalho tem por objetivo utilizar técnicas de biometria, para desenvolver uma solução computacional para o controle das informações referentes aos serviços, produtos e financeiro da Instituição no projeto. A proposta desse desafio é planejar o desenvolvimento do sistema proposto pelo cliente, assegurando a melhor qualidade possível durante o desenvolvimento e o resultado final.
Palavras-chave: Identificação; Autenticação; Biométrica.
ABSTRACT
This study aims to use biometric techniques to develop a computational solution for the control of the information regarding the services, products and financial Institution in the project. The purpose of this challenge is to plan the development of the system proposed by the client, ensuring the best possible quality during development and the end result.
Keywords: Identification; Authentication; Biometrics.
SUMÁRIO
1 INTRODUÇÃO
Objetivo e Motivação do Trabalho
O objetivo desse trabalho em grupo é desenvolver um serviço de identificação e autenticação biométrica, utilizando-se, para tanto, a linguagem de programação Java.
O aplicativo será desenvolvido de acordo com o grande desenvolvimento da tecnologia da informação, produtos e serviços que envolvem a identificação de pessoas/objetos aumentaram e forma significativa conforme o passar dos anos. 
Com essa demanda, a identificação e autenticação da pessoa/objeto a partir das suas características biológicas, físicas e/ou comportamentais são mais simples e cômoda que a memorização de palavras chave e código de acesso. 
A biometria, ou seja, é a ciência da tecnologia de medição e análise de dados biológicos. Este campo tem sido estudado desde o início do século XX, mas nestes dias o futuro já está aqui com muitas aplicações baseadas em vários tipos de dados biométricos, como impressões digitais, íris e retinas, os padrões de voz, padrões faciais, dentre as regiões geométricas das mãos e muitos outros.
Por questões de praticidade, o aumento significativo da quantidade de informação disponível no formato digital e o desenvolvimento das tecnologias de informação e comunicação e a possibilidade de falsificação das mesmas, vem exigindo meios mais seguros para proteção dos utilizadores. A identificação e verificação de utilizadores são um dos principais aspectos a serem considerados para garantir a segurança da informação.
Consequentemente, o problema da segurança relacionada com a privacidade de informação tem sido cada vez mais importante para as empresas, sejam elas pequenas médias ou grandes. O acesso de pessoas não autorizadas a informações sigilosas ou a lugares restritos pode causar graves problemas às empresas e governos, sendo cada vez mais necessário provar a sua identidade para obter o acesso a dados sigilosos.
Com o objetivo é implementar uma identificação biométrica se dá em duas fases: primeiro o usuário é registrado no sistema, permitindo a captura de suas características biométricas, as quais são convertidas em um modelo que as representa matematicamente. A segunda fase é a autenticação, onde o usuário apresenta suas características biométricas, que são comparadas e validadas com o modelo armazenado com dados das características do usuário valendo desde a sua impressão digital até a composição da sua retina ou reconhecimento dos padrões facial. Depois disso, as informações são comparadas com o exemplo do que está armazenado no computador. Se houver semelhança, a entrada é permitida, ou o contrário.
Resumindo, o objetivo é desenvolver um programa simples e prático que possibilite a segurança de informações entre seus usuários de modo que as informações sejam privadas.
TÉCNOLOGIA BIOMÉTRICA
A biometria tem sido utilizada largamente nos nossos dias por ser um eficiente mecanismo de segurança. Biometria, em termos simples, significa o estudo estático das características físicas e comportamentais dos seres vivos; bio (vida) + metria (medida). Esse termo é utilizado também como maneira de identificar unicamente um indivíduo por meio de suas características físicas ou comportamentais.
Esta tecnologia está muito presente em filmes e seriados, principalmente aqueles com temática policial e investigativa. Ou seja, princípio básico desta técnica para identificação é: seu corpo, sua senha.
Embora tenham se tornado famoso há pouco tempo, as técnicas de reconhecimento por meio das características das pessoas já eram utilizadas na China no ano 800 D.C., quando comerciantes confirmavam a identidade de seus clientes por meio da impressão de suas digitais em tábuas de barro.
Como Funciona?
Para que um sistema biométrico funcione sem problemas alguns equipamentos são necessários: scanner ou sensor, um computador relativamente potente e um software para a análise das imagens captadas.
Em teoria, o processo de análise biométrica é bem simples. Quando o scanner é acionado, a principal função dele é obter uma imagem nítida e de alta resolução do objeto em estudo: digitais e geometria da mão, íris, retina, expressões faciais.
O passo seguinte é colocar a imagem captada à disposição do software biométrico, o qual analisa e extrai as características mais relevantes da figura. Em uma foto da mão, por exemplo, o que interessa são as linhas que dão forma às digitais.
Uma vez com as características extraídas, a última etapa consiste na comparação entre a imagem obtida e as fotos presentes no banco de dados. Esta verificação é feita com o auxílio de diversos algoritmos, cada um trabalhando da sua maneira.
Os Tipos de Biometria
Veias das mãos - mesmo que tenha sido descoberta há pouco tempo, esta característica é muito confiável para o reconhecimento de pessoas, pois além de ser imutável a falsificação deste tipo de informação é quase impossível. Conheça a seguir os principais sistemas de leitura biométrica;
Impressão digital - Captação das linhas da impressão digital por meio de um leitor biométrico que impulsiona o sistema a compará-lo com seu banco de dados;
Reconhecimento facial - Realiza a leitura dos traços do rosto de um indivíduo;
Veias - Realiza a captação de informações baseados nos volumes de veias aparentes do corpo de uma pessoa;
Identificação pela íris - Fotografia da íris do olho realizada sob uma iluminação infravermelha;
Identificação pela retina - Informações são coletadas por meio de um foco de luz;
Geometria da mão - Envolve a identificação do tamanho, da estrutura e da posição da palma da mão de uma pessoa;
Reconhecimento de voz - Analisa a sonoridade, a gravidade e os sinais agudos de uma voz. Pode falhar, visto que existem pessoas que sofrem mudanças na estrutura oral.
Onde a Biometria é Utilizada?
Todas as características citadas acima são de grande utilidade na criminalística para a identificação de suspeitos em cenas de crimes, aeroportos e muitos outros lugares. A biometria também é muito utilizada na área de segurança, exigindo a confirmação física de que a pessoa realmente é quem diz.
3 FUNDAMENTOS DAS PRINCIPAIS TÉCNICAS BIOMÉTRICAS
3.1 Comparação das Tecnologias Biométricas 
É possível perceberse uma característica humana pode ser utilizada para os dados biométricos em termos dos seguintes parâmetros:
Universalidade - cada pessoa deve ter a característica.
Singularidade - distinção que separa os pontos biométricos individualmente a partir de outro.
Permanência - mede quanto o equipamento biométrico resiste ao envelhecimento.
Colectabilidade - facilidade de aquisição para a medição.
Desempenho - precisão, velocidade e robustez da tecnologia utilizada.
Grau de aceitabilidade - de aprovação de uma tecnologia.
Evasão - facilidade de uso de um substituto.
A tabela a seguir mostra uma comparação entre os sistemas biométricos existentes em termos desses parâmetros:
3.2 Aplicações da Biometria
A utilização da biometria tem basicamente dois propósitos: validar e identificar usuários.
As aplicações de biometria contemplam basicamente os seguintes tipos de acesso:
3.2.1 Controle de Acesso físico
Já há alguns anos, ambientes que exigem segurança vêm utilizando biometria para controle e acesso. Durante os jogos olímpicos de 1996, 65.000 pessoas passaram por um rigoroso controle de acesso usando biometria. Alguns aeroportos nos EUA já estão testando esta tecnologia com passageiros voluntários e especialistas arriscam a previsão de que esta tecnologia poderá substituir os passaportes no futuro. Algumas academias de ginásticas no Brasil já se utilizam para controlar acesso e frequência dos seus alunos.
3.2.2 Acesso Virtual
A redução drástica dos preços dos dispositivos biométricos e a forte necessidade de maior segurança da informação vêm atraindo muitas empresas a utilizarem a biometria para controlar o acesso às suas redes e programas. O grande atrativo é trocar as senhas por uma chave mais segura e protegida, onde você é sua própria chave, que ninguém pode roubar ou pegar emprestada.
3.2.3 Comércio Eletrônico
O número de fraudes nesse setor cresce a cada dia, sendo imperioso o uso de mecanismos mais eficazes para a identificação de clientes do que os cartões magnéticos com senha. Ossmart cards já são mundialmente reconhecidos como um dispositivo de alta segurança para substituírem os cartões magnéticos. Além disso, a possibilidade deles guardarem os dados biométricos para a identificação do usuário torna esta combinação perfeita para as transações comerciais. O usuário pode assinar digitalmente as transações com um certificado presente no cartão, que só é liberado mediante a identificação biométrica com a impressão digital. Assim, aplicações bancárias, aplicações na Web e em postos de vendas, ofereceriam muito mais segurança aos seus usuários e reduziriam substancialmente os prejuízos com fraudes.
3.3 Funções
Um sistema biométrico pode fornecer as seguintes funções:
Verificação ("One-to-One" ou 1:1) - Autentica seus utilizadores, em conjunto com um cartão numérico, magnético ou nome de usuário ou número de identificação. O modelo biométrico capturado é comparado com o armazenado do usuário seja registrado em um cartão inteligente ou banco de dados para verificação;
Identificação ("One-to-many" ou 1: N) - Autentica seus usuários a partir da característica biométrica e sem a utilização de cartões inteligentes, nomes ou números de identificação. O modelo biométrico é comparado com todos os registros no banco de dados (varredura) e uma pontuação mais próxima da partida é devolvida. A próxima etapa dentro do limite permitido é considerar o indivíduo e autenticar.
3.3.1 Vantagens e desvantagens da verificação identificação (1: N)
A verificação (1:1) é um processo muito mais rápido em relação à identificação quando o número de usuários ultrapassa de 5000. Outra vantagem, é que em grande quantidade de usuários a verificação acaba se tornando mais segura.
Porém, uma desvantagem é a necessidade de o usuário ter que se validar com ID ou cartão enquanto a identificação (1: N) você apenas usa a digital.
3.4 Desempenho
Os sistemas biométricos são suscetíveis aos seguintes tipos de erros:
FRR (False Rejection Rate) - a frequência de rejeição em relação às pessoas que devem ser corretamente verificada. Quando um usuário autorizado é rejeitado ele / ela deve representar a sua característica biométrica ao sistema. Note-se que uma falsa rejeição não significa necessariamente um erro do sistema, por exemplo, no caso de um sistema baseado em impressão digital, um posicionamento incorreto do dedo no sensor ou sujeira pode produzir falsas rejeições;
FAR (False Acceptance Rate) - a frequência de acessos fraudulenta, devido a impostores reivindicando uma identidade falsa.
3.4.1 False Acceptance Rate e False Reject Rate
 Devido à natureza estatística da taxa de falsa aceitação, um grande número de tentativas de fraude deve ser realizado para obter resultados estatísticos confiáveis.
4 PLANO DE DESENVOLVIMENTO DA APLICAÇÃO
4.1 Ferramenta: Netbeans IDE 8.0
NetBeans IDE é uma aplicação de código aberto feito para auxiliar os desenvolvedores na criação de aplicativos em diferentes plataformas, utilizando tecnologia Java para isto. Nela você encontra todas as ferramentas necessárias para projetos profissionais em Java, C/C++ e Ruby on Rails. 
4.1.1 Características Gerais
NetBeans IDE oferece o recurso GUI Builder que é uma ferramenta utilizada para criação de design e posicionamento dos componentes da interface, já que apresenta para o desenvolvedor todos os espaços e alinhamentos corretos automaticamente. Você pode editar as propriedades destes componentes clicando nos botões JLabels, JButtons e JTextFields.
Também é possível criar, testar e eliminar os erros de aplicações em desenvolvimentos para celulares. O NetBeans IDE oferece ferramentas com suporte de criação em todos os componentes Java EE, incluindo EJBs, serviços web, entre outros. É permitida a modelagem de visuais UML, com vários tipos de diagramas, bem como desenhar e analisar as aplicações destes modelos.
Os desenvolvedores também vão encontrar um ambiente para desenvolvimento profissional de modelos e projetos em C/C++, oferecendo bibliotecas de componentes dinâmicas ou estáticas, sendo possível também utilizar os projetos já desenvolvidos nestas linguagens, e aproveita-los para novas criações. NetBeans IDE oferece todo o suporte para criação de interfaces gráficas de maneira visual, bem como o desenvolvimento de aplicações para a internet, celular e colaborações entre usuários, apresentando funcionalidades para soluções mais completas em programações com Java.
4.1.2 Pacote: JDK 8.0
Java SE Development Kit (JDK) for Windows é um Kit de Desenvolvimento Java, ou seja, um conjunto de utilitários que permitem criar sistemas de software para plataforma Java. Ele contém todo o ambiente necessário para a criação e execução de aplicações Java, incluindo a máquina virtual Java (JVM), o compilador Java, APIs do Java e outras ferramentas utilitárias.
Plataforma Java é o nome dado ao ambiente computacional, ou plataforma, elaborado pela empresa Sun Microsystems. O desenvolvedor de software cria programas para este ambiente através da linguagem de programação Java e de um conjunto de ferramentas de desenvolvimento.
4.1.3 Java: Runtime Environment (JRE)
Java Runtime Environment (JRE) significa Ambiente de Tempo de Execução Java, e é utilizado para executar as aplicações da plataforma Java. É composto por bibliotecas (APIs) e pela Máquina Virtual Java (JVM). Ele contém as ferramentas necessárias para a execução de aplicativos desenvolvidos com tecnologia e linguagem Java em seu computador.
Atualmente, muitas páginas na internet, jogos online, programas, programas de chat, e visualizadores de imagem 3D entre outros, utilizam tecnologia Java, o que torna imprescindível a instalação deste programa em seu computador.
O Java Runtime Environment (JRE) não é um ambiente de desenvolvimento, aqui não estão contidas as ferramentas para tal função. Para isso é necessário ter instalado em seu computador  o Java SE Development Kit (JDK).4.2 Java
A linguagem de programação Java é voltada à orientação a objetos e foi desenvolvida na década de 90 por uma equipe de programadores chefiada por James Gosling, da empresa Sun Microsystems. Diferentemente das linguagens convencionais, que são compiladas para código nativo, a linguagem Java é compilada para um "bytecode" que é executado por uma máquina virtual.
A linguagem de programação Java é a convencional da Plataforma Java, mas não sua única.
A Máquina virtual Java, do inglês Java Virtual Machine (JVM), é um programa que carrega e executa os aplicativos em Java, convertendo os “bytecodes” em código executável. A JVM é responsável pelo gerenciamento dos aplicativos à medida que são executados.
Os programas escritos em linguagem Java podem funcionar em qualquer plataforma de hardware e software que possua uma versão da JVM, tornando essas aplicações independentes da plataforma do sistema operacional na qual estão operando.
Desde o lançamento da linguagem, em maio de 1995, a plataforma Java foi a mais rapidamente adotada na história da computação. Em 2003 já havia atingido a marca de 4 milhões de desenvolvedores em todo o mundo. Hoje Java é uma referência no mercado de desenvolvimento de software e popularizou-se pelo seu uso na internet, possuindo seu ambiente de execução presente em web browsers, mainframes, sistemas operacionais, celulares, palmtops e cartões inteligentes, entre outros.
5 PROJETO ESTRUTURA DO PROGRAMA
Nesta etapa do projeto estão apresentadas as telas principais do software. A tela de erro do sistema é automática, por isso não foi colocada como sendo feita pelo projetista de telas do grupo.
Este projeto foi focado pelo grupo em segurança, deixando de lado alguas funçoes a qual o software teria apenas para ilustração ou nenhuma funcionalidade do projeto proposto.
Imagem 1 – Tela de Acesso ao software por Leitor de Digital
Nesta Tela o acesso ao sistema é feito apenas pela digital do usuário, lembrando que para este projeto utilizamos leitores de digitais, comprado pelo grupo para realização dos testes e implementação.
Imagem 2 – Tela de Início do Sistema
Esta tela consiste em o usuário alterar informações dos usuários já cadastrados, alterando seus níveis de acesso e sua propriedade dentro do sistema.
Imagem 3 – Tela de Cadastro do Usuário
Esta tela consiste em cadastrar um novo usuário, esta tela têm permissões, ao qual apenas o administrador poderá fazer ao cadastrar o usuário.
Imagem 4 – Tela do Usuário
Esta tela aparece antes da tela de login do sistema. Essa ideia foi criada para dar mais segurança ao sistema.
6 CÓDIGO FONTE
6.1 Código das Telas
Código 1 – Tela de Acesso ao software por Leitor de Digital
/*
 * 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 br.com.testes;
/**
 *
 * @author Diogo-Pc
 */
public class Login extends javax.swing.JFrame {
 /**
 * Creates new form Login
 */
 public Login() {
 initComponents();
 }
 /**
 * This method is called from within the constructor 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();
 jScrollPane2 = new javax.swing.JScrollPane();
 jTextArea1 = new javax.swing.JTextArea();
 jButton1 = new javax.swing.JButton();
 jButton2 = new javax.swing.JButton();
 setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
 jPanel1.setLayout(new java.awt.BorderLayout());
 jTextArea1.setColumns(20);
 jTextArea1.setRows(5);
 jScrollPane2.setViewportView(jTextArea1);
 jButton1.setText("Acessar");
 jButton2.setText("Sair");
 jButton2.addActionListener(new java.awt.event.ActionListener() {
 public void actionPerformed(java.awt.event.ActionEvent evt) {
 jButton2ActionPerformed(evt);
 }
 });
 javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
 getContentPane().setLayout(layout);
 layout.setHorizontalGroup(
 layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
 .addGroup(layout.createSequentialGroup()
 .addGap(28, 28, 28)
 .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
 .addGroup(layout.createSequentialGroup()
 .addComponent(jScrollPane2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 110, Short.MAX_VALUE)
 .addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
 .addGap(89, 89, 89))
 .addGroup(layout.createSequentialGroup()
 .addComponent(jButton1, javax.swing.GroupLayout.PREFERRED_SIZE, 121, javax.swing.GroupLayout.PREFERRED_SIZE)
 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
 .addComponent(jButton2, javax.swing.GroupLayout.PREFERRED_SIZE, 85, javax.swing.GroupLayout.PREFERRED_SIZE)
 .addGap(29, 29, 29))))
 );
 layout.setVerticalGroup(
 layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
 .addGroup(layout.createSequentialGroup()
 .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
 .addGroup(layout.createSequentialGroup()
 .addGap(90, 90, 90)
 .addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
 .addGroup(layout.createSequentialGroup()
 .addGap(33, 33, 33)
 .addComponent(jScrollPane2, javax.swing.GroupLayout.PREFERRED_SIZE, 201, javax.swing.GroupLayout.PREFERRED_SIZE)))
 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 97, Short.MAX_VALUE)
 .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
 .addComponent(jButton1)
 .addComponent(jButton2))
 .addContainerGap())
 );
 pack();
 }// </editor-fold> 
 private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) { 
 // TODO add your handling code here:
 } 
 /**
 * @param args the command line arguments
 */
 public static void main(String args[]) {
 /* 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(Login.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
 } catch (InstantiationException ex) {
 java.util.logging.Logger.getLogger(Login.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
 } catch (IllegalAccessException ex) {
 java.util.logging.Logger.getLogger(Login.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
 } catch (javax.swing.UnsupportedLookAndFeelException ex) {
 java.util.logging.Logger.getLogger(Login.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
 }
 //</editor-fold>
 /* Create and display the form */
 java.awt.EventQueue.invokeLater(new Runnable() {
 public void run() {
 new Login().setVisible(true);
 }
 });
 }
 // Variables declaration - do not modify 
 private javax.swing.JButton jButton1;
 private javax.swing.JButton jButton2;
 private javax.swing.JPanel jPanel1;
 private javax.swing.JScrollPane jScrollPane2;
 private javax.swing.JTextArea jTextArea1;
 // End of variables declaration 
}
Código 2 – Tela de Início do Sistema
/*
 * 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 br.com.testes;
/**
 *
 * @author Diogo-Pc
 */
public class Tela_inicial extends javax.swing.JFrame {
 /**
 * Creates new form Tela_inicial
 */
 public Tela_inicial() {
 initComponents();
 }
 /**
 * This method is called from within the constructor 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();
 jMenuBar1 = new javax.swing.JMenuBar();
 jMenu1 = new javax.swing.JMenu();
 jRadioButtonMenuItem1 = new javax.swing.JRadioButtonMenuItem();
 jMenuItem1 = new javax.swing.JMenuItem();
 jMenuItem2 = new javax.swing.JMenuItem();
 jMenu2 = new javax.swing.JMenu();
 jMenu3 = new javax.swing.JMenu();
 jMenu4 = new javax.swing.JMenu();
 setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
 jPanel1.setLayout(new java.awt.BorderLayout());
 jMenu1.setText("Inicio");
 jRadioButtonMenuItem1.setSelected(true);
 jRadioButtonMenuItem1.setText("Novo Usuario");
 jRadioButtonMenuItem1.addActionListener(new java.awt.event.ActionListener() {
 public void actionPerformed(java.awt.event.ActionEvent evt) {
 jRadioButtonMenuItem1ActionPerformed(evt);
 }
 });
 jMenu1.add(jRadioButtonMenuItem1);
 jMenuItem1.setText("Niveis De Acesso");
 jMenuItem1.addActionListener(new java.awt.event.ActionListener() {
 public void actionPerformed(java.awt.event.ActionEvent evt) {
 jMenuItem1ActionPerformed(evt);
 }
 });
 jMenu1.add(jMenuItem1);
 jMenuItem2.setText("Login De Acesso");
 jMenuItem2.addActionListener(new java.awt.event.ActionListener() {
 public void actionPerformed(java.awt.event.ActionEvent evt) {
 jMenuItem2ActionPerformed(evt);
 }
 });
 jMenu1.add(jMenuItem2);
 jMenuBar1.add(jMenu1);
 jMenu2.setText("Cadastro");
 jMenuBar1.add(jMenu2);
 jMenu3.setText("Ajuda");
 jMenuBar1.add(jMenu3);
 jMenu4.setText("Sair");
 jMenuBar1.add(jMenu4);
 setJMenuBar(jMenuBar1);
 javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
 getContentPane().setLayout(layout);
 layout.setHorizontalGroup(
 layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
 .addGroup(layout.createSequentialGroup()
 .addGap(101, 101, 101)
 .addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
 .addContainerGap(694, Short.MAX_VALUE))
 );
 layout.setVerticalGroup(
 layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
 .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
 .addContainerGap(369, Short.MAX_VALUE)
 .addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
 .addGap(76, 76, 76))
 );
 pack();
 }// </editor-fold> 
 private void jRadioButtonMenuItem1ActionPerformed(java.awt.event.ActionEvent evt) { 
 // TODO add your handling code here:
 } 
 private void jMenuItem1ActionPerformed(java.awt.event.ActionEvent evt) { 
 // TODO add your handling code here:
 } 
 private void jMenuItem2ActionPerformed(java.awt.event.ActionEvent evt) { 
 // TODO add your handling code here:
 } 
 /**
 * @param args the command line arguments
 */
 public static void main(String args[]) {
 /* 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(Tela_inicial.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
 } catch (InstantiationException ex) {
 java.util.logging.Logger.getLogger(Tela_inicial.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
 } catch (IllegalAccessException ex) {
 java.util.logging.Logger.getLogger(Tela_inicial.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
 } catch (javax.swing.UnsupportedLookAndFeelException ex) {
 java.util.logging.Logger.getLogger(Tela_inicial.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
 }
 //</editor-fold>
 /* Create and display the form */
 java.awt.EventQueue.invokeLater(new Runnable() {
 public void run() {
 new Tela_inicial().setVisible(true);
 }
 });
 }
 // Variables declaration - do not modify 
 private javax.swing.JMenu jMenu1;
 private javax.swing.JMenu jMenu2;
 private javax.swing.JMenu jMenu3;
 private javax.swing.JMenu jMenu4;
 private javax.swing.JMenuBar jMenuBar1;
 private javax.swing.JMenuItem jMenuItem1;
 private javax.swing.JMenuItem jMenuItem2;private javax.swing.JPanel jPanel1;
 private javax.swing.JRadioButtonMenuItem jRadioButtonMenuItem1;
 // End of variables declaration 
}
Código 3 – Tela de Cadastro do Usuário
/*
 * 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 br.com.testes;
/**
 *
 * @author Diogo-Pc
 */
public class Novo_Cadastro extends javax.swing.JFrame {
 /**
 * Creates new form Novo_Cadastro
 */
 public Novo_Cadastro() {
 initComponents();
 }
 /**
 * This method is called from within the constructor 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();
 jLabel8 = new javax.swing.JLabel();
 jPanel2 = new javax.swing.JPanel();
 rbtNivel1 = new javax.swing.JRadioButton();
 rbtNivel2 = new javax.swing.JRadioButton();
 rbtNivel3 = new javax.swing.JRadioButton();
 lbl = new javax.swing.JLabel();
 jLabel1 = new javax.swing.JLabel();
 jButton1 = new javax.swing.JButton();
 jTextField1 = new javax.swing.JTextField();
 jTextField2 = new javax.swing.JTextField();
 jLabel2 = new javax.swing.JLabel();
 jButton2 = new javax.swing.JButton();
 jButton3 = new javax.swing.JButton();
 jMenuBar1 = new javax.swing.JMenuBar();
 jMenu1 = new javax.swing.JMenu();
 jMenu2 = new javax.swing.JMenu();
 setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
 jPanel1.setLayout(new java.awt.BorderLayout());
 jLabel8.setFont(new java.awt.Font("Tahoma", 1, 12)); // NOI18N
 jLabel8.setText("Nome:");
 jPanel2.setBorder(javax.swing.BorderFactory.createEtchedBorder());
 rbtNivel1.setText("Nível 1");
 rbtNivel2.setText("Nível 2");
 rbtNivel3.setText("Nível 3");
 javax.swing.GroupLayout jPanel2Layout = new javax.swing.GroupLayout(jPanel2);
 jPanel2.setLayout(jPanel2Layout);
 jPanel2Layout.setHorizontalGroup(
 jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
 .addGroup(jPanel2Layout.createSequentialGroup()
 .addContainerGap()
 .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
 .addGroup(jPanel2Layout.createSequentialGroup()
 .addComponent(rbtNivel1)
 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
 .addComponent(rbtNivel3))
 .addComponent(rbtNivel2))
 .addContainerGap(12, Short.MAX_VALUE))
 );
 jPanel2Layout.setVerticalGroup(
 jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
 .addGroup(jPanel2Layout.createSequentialGroup()
 .addGap(10, 10, 10)
 .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
 .addComponent(rbtNivel1)
 .addComponent(rbtNivel3))
 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
 .addComponent(rbtNivel2)
 .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
 );
 lbl.setFont(new java.awt.Font("Tahoma", 1, 12)); // NOI18N
 lbl.setText("Cargo:");
 jLabel1.setFont(new java.awt.Font("Tahoma", 1, 15)); // NOI18N
 jLabel1.setText("Inclusão de Novo Usuário com Biométria ");
 jButton1.setText("Sair");
 jButton1.addActionListener(new java.awt.event.ActionListener() {
 public void actionPerformed(java.awt.event.ActionEvent evt) {
 jButton1ActionPerformed(evt);
 }
 });
 jTextField1.addActionListener(new java.awt.event.ActionListener() {
 public void actionPerformed(java.awt.event.ActionEvent evt) {
 jTextField1ActionPerformed(evt);
 }
 });
 jTextField2.addActionListener(new java.awt.event.ActionListener() {
 public void actionPerformed(java.awt.event.ActionEvent evt) {
 jTextField2ActionPerformed(evt);
 }
 });
 jLabel2.setText("Nivel de Acesso:");
 jButton2.setText("Gerar Digital");
 jButton3.setText("Gravar Usuario");
 jButton3.addActionListener(new java.awt.event.ActionListener() {
 public void actionPerformed(java.awt.event.ActionEvent evt) {
 jButton3ActionPerformed(evt);
 }
 });
 jMenu1.setText("Inicio");
 jMenuBar1.add(jMenu1);
 jMenu2.setText("Ajuda");
 jMenuBar1.add(jMenu2);
 setJMenuBar(jMenuBar1);
 javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
 getContentPane().setLayout(layout);
 layout.setHorizontalGroup(
 layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
 .addGroup(layout.createSequentialGroup()
 .addGap(38, 38, 38)
 .addComponent(jButton2, javax.swing.GroupLayout.PREFERRED_SIZE, 111, javax.swing.GroupLayout.PREFERRED_SIZE)
 .addGap(67, 67, 67)
 .addComponent(jButton3)
 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
 .addComponent(jButton1, javax.swing.GroupLayout.PREFERRED_SIZE, 70, javax.swing.GroupLayout.PREFERRED_SIZE)
 .addGap(41, 41, 41))
 .addGroup(layout.createSequentialGroup()
 .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
 .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
 .addGroup(layout.createSequentialGroup()
 .addGap(10, 10, 10)
 .addComponent(lbl)
 .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
 .addGroup(layout.createSequentialGroup()
 .addGap(194, 194, 194)
 .addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
 .addGroup(layout.createSequentialGroup()
 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
 .addComponent(jTextField2))))
 .addGroup(layout.createSequentialGroup()
 .addContainerGap()
 .addComponent(jLabel8)
 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
 .addComponent(jTextField1))
 .addGroup(layout.createSequentialGroup()
 .addGap(153, 153, 153)
 .addComponent(jLabel1))
 .addGroup(layout.createSequentialGroup()
 .addContainerGap()
 .addComponent(jPanel2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)))
 .addGroup(layout.createSequentialGroup().addContainerGap()
 .addComponent(jLabel2)))
 .addContainerGap(198, Short.MAX_VALUE))
 );
 layout.setVerticalGroup(
 layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
 .addGroup(layout.createSequentialGroup()
 .addComponent(jLabel1)
 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
 .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
 .addComponent(jLabel8)
 .addComponent(jTextField1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
 .addGap(18, 18, 18)
 .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
 .addComponent(lbl)
 .addComponent(jTextField2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
 .addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 63, Short.MAX_VALUE)
 .addComponent(jLabel2)
 .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.RELATED, 178, Short.MAX_VALUE)
 .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
 .addComponent(jButton1, javax.swing.GroupLayout.PREFERRED_SIZE, 33, javax.swing.GroupLayout.PREFERRED_SIZE)
 .addComponent(jButton2, javax.swing.GroupLayout.PREFERRED_SIZE, 33, javax.swing.GroupLayout.PREFERRED_SIZE)
 .addComponent(jButton3, javax.swing.GroupLayout.PREFERRED_SIZE, 33, javax.swing.GroupLayout.PREFERRED_SIZE))
 .addGap(22, 22, 22))
 );
 pack();
 }// </editor-fold> 
 private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) { 
 // TODO add your handling code here:
 } 
 private void jTextField1ActionPerformed(java.awt.event.ActionEvent evt) { 
 // TODO add your handling code here:
 } 
 private void jTextField2ActionPerformed(java.awt.event.ActionEvent evt) { 
 // TODO add your handling code here:
 } 
 private void jButton3ActionPerformed(java.awt.event.ActionEvent evt) { 
 // TODO add your handling code here:
 } 
 /**
 * @param args the command line arguments
 */
 public static void main(String args[]) {
 /* 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(Novo_Cadastro.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
 } catch (InstantiationException ex) {
 java.util.logging.Logger.getLogger(Novo_Cadastro.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
 } catch (IllegalAccessException ex) {
 java.util.logging.Logger.getLogger(Novo_Cadastro.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
 } catch (javax.swing.UnsupportedLookAndFeelException ex) {
 java.util.logging.Logger.getLogger(Novo_Cadastro.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
 }
 //</editor-fold>
 /* Create and display the form */
 java.awt.EventQueue.invokeLater(new Runnable() {
 public void run() {
 new Novo_Cadastro().setVisible(true);
 }
 });
 }
 // Variables declaration - do not modify 
 private javax.swing.JButton jButton1;
 private javax.swing.JButton jButton2;
 private javax.swing.JButton jButton3;
 private javax.swing.JLabel jLabel1;
 private javax.swing.JLabel jLabel2;
 private javax.swing.JLabel jLabel8;
 private javax.swing.JMenu jMenu1;
 private javax.swing.JMenu jMenu2;
 private javax.swing.JMenuBar jMenuBar1;
 private javax.swing.JPanel jPanel1;
 private javax.swing.JPanel jPanel2;
 private javax.swing.JTextField jTextField1;
 private javax.swing.JTextField jTextField2;
 private javax.swing.JLabel lbl;
 private javax.swing.JRadioButton rbtNivel1;
 private javax.swing.JRadioButton rbtNivel2;
 private javax.swing.JRadioButton rbtNivel3;
 // End of variables declaration 
}
Código 4 – Tela do Usuário
/*
 * 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 br.com.testes;
/**
 *
 * @author Diogo-Pc
 */
public class niveis extends javax.swing.JFrame {
 /**
 * Creates new form niveis
 */
 public niveis() {
 initComponents();
 }
 /**
 * This method is called from within the constructor 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();
 jLabel1 = new javax.swing.JLabel();
 jTextField1 = new javax.swing.JTextField();
 jComboBox1 = new javax.swing.JComboBox();
 jButton1 = new javax.swing.JButton();
 jButton2 = new javax.swing.JButton();
 setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
 jPanel1.setLayout(new java.awt.BorderLayout());
 jLabel1.setText("Usuario: ");
 jComboBox1.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Nivel1", "nivel2", "nivel3" }));
 jButton1.setText("Acessar");
 jButton2.setText("Sair");
 javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
 getContentPane().setLayout(layout);
 layout.setHorizontalGroup(
 layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
 .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
 .addContainerGap()
 .addComponent(jButton1)
 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
 .addComponent(jButton2).addGap(24, 24, 24))
 .addGroup(layout.createSequentialGroup()
 .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
 .addGroup(layout.createSequentialGroup()
 .addGap(18, 18, 18)
 .addComponent(jComboBox1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
 .addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
 .addGroup(layout.createSequentialGroup()
 .addGap(20, 20, 20)
 .addComponent(jLabel1)
 .addGap(28, 28, 28)
 .addComponent(jTextField1, javax.swing.GroupLayout.PREFERRED_SIZE, 280, javax.swing.GroupLayout.PREFERRED_SIZE)))
 .addContainerGap(114, Short.MAX_VALUE))
 );
 layout.setVerticalGroup(
 layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
 .addGroup(layout.createSequentialGroup()
 .addGap(25, 25, 25)
 .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
 .addComponent(jLabel1)
 .addComponent(jTextField1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
 .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
 .addGroup(layout.createSequentialGroup()
 .addGap(78, 78, 78)
 .addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
 .addGroup(layout.createSequentialGroup()
 .addGap(66, 66, 66)
 .addComponent(jComboBox1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)))
 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 129, Short.MAX_VALUE)
 .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
 .addComponent(jButton2)
 .addComponent(jButton1))
 .addContainerGap())
 );
 pack();
 }// </editor-fold> 
 /**
 * @param args the command line arguments
 */
 public static void main(String args[]) {
 /* 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(niveis.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
 } catch (InstantiationException ex) {
 java.util.logging.Logger.getLogger(niveis.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
 } catch (IllegalAccessException ex) {
 java.util.logging.Logger.getLogger(niveis.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
 } catch (javax.swing.UnsupportedLookAndFeelException ex) {
 java.util.logging.Logger.getLogger(niveis.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
 }
 //</editor-fold>
 /* Create and display the form */
 java.awt.EventQueue.invokeLater(new Runnable() {
 public void run() {
 new niveis().setVisible(true);
 }
 });
 }
 // Variables declaration - do not modify 
 private javax.swing.JButton jButton1;
 private javax.swing.JButton jButton2;
 private javax.swing.JComboBox jComboBox1;
 private javax.swing.JLabel jLabel1;
 private javax.swing.JPanel jPanel1;
 private javax.swing.JTextField jTextField1;
 // End of variables declaration 
}
6.2 Código da Projeto Biometria
Código do Leitor Biométrico
Main
package br.com.testes;
import java.util.EnumMap;
import java.util.concurrent.LinkedBlockingQueue;
import com.digitalpersona.onetouch.DPFPDataPurpose;
import com.digitalpersona.onetouch.DPFPFeatureSet;
import com.digitalpersona.onetouch.DPFPFingerIndex;
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.DPFPCapturePriority;
import com.digitalpersona.onetouch.capture.event.DPFPDataEvent;
import com.digitalpersona.onetouch.capture.event.DPFPDataListener;
import com.digitalpersona.onetouch.capture.event.DPFPReaderStatusAdapter;
import com.digitalpersona.onetouch.capture.event.DPFPReaderStatusEvent;
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;
public class Main {
	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// Variaveis...
		EnumMap<DPFPFingerIndex, DPFPTemplate> templates;
		templates = new EnumMap<DPFPFingerIndex, DPFPTemplate>(
				DPFPFingerIndex.class);
		// Inicio do cadastro da digital
		System.out.println("Cadastrando digital...");
		try {
			DPFPFingerIndex finger = DPFPFingerIndex.values()[7];
			DPFPFeatureExtraction featureExtractor = DPFPGlobal
					.getFeatureExtractionFactory().createFeatureExtraction();
			DPFPEnrollment enrollment = DPFPGlobal.getEnrollmentFactory()
					.createEnrollment();
			// String activeReader = null;
			while (enrollment.getFeaturesNeeded() > 0) {
				DPFPSample sample = getSample(
						null,
						String.format(
		"Registre a digital do indicador da mao direita (Faltam %d leituras)\n",
								enrollment.getFeaturesNeeded()));
				if (sample == null)
					continue;
				DPFPFeatureSet featureSet;
				try {
					featureSet = featureExtractor.createFeatureSet(sample,
							DPFPDataPurpose.DATA_PURPOSE_ENROLLMENT);
				} catch (DPFPImageQualityException e) {
					System.out.printf(
							"Ma qualidade: \"%s\". Tente novamente. \n", e
									.getCaptureFeedback().toString());
					continue;
				}
				enrollment.addFeatures(featureSet);
			}
			DPFPTemplate template = enrollment.getTemplate();
			// user.setTemplate(finger, template);
			templates.put(finger, template);
			System.out.print("Cadastrado com sucesso!\n");
		} catch (DPFPImageQualityException e) {
			System.out.printf("Falha ao cadastrar digital.\n\n");
		} catch (InterruptedException e) {
			throw new RuntimeException(e);
		}
		// Fim do cadastro da digital
		// Inicio da comparação digital
		System.out.println("Comparando as digitais...");
		Boolean encontrou = false;
		while (!encontrou) {
			try {
				DPFPSample sample = getSample(null,
						"Registre a digital do indicadorda mão direita para verificação.\n");
				if (sample == null)
					throw new Exception();
				DPFPFeatureExtraction featureExtractor = DPFPGlobal
						.getFeatureExtractionFactory()
						.createFeatureExtraction();
				DPFPFeatureSet featureSet = featureExtractor.createFeatureSet(
						sample, DPFPDataPurpose.DATA_PURPOSE_VERIFICATION);
				DPFPVerification matcher = DPFPGlobal.getVerificationFactory()
						.createVerification();
				matcher.setFARRequested(DPFPVerification.MEDIUM_SECURITY_FAR);
				for (DPFPFingerIndex finger : DPFPFingerIndex.values()) {
					DPFPTemplate template = templates.get(finger);
					if (template != null) {
						DPFPVerificationResult result = matcher.verify(
								featureSet, template);
						if (result.isVerified()) {
							System.out.print("Ok!!! Digital válida!");							
							encontrou = true;
						} else {
							System.out.println("Falha.. Digital não registrada, tente novamente.");
						}
					}
				}
			} catch (Exception e) {
				System.out.printf("Failed to perform verification.");
			}
		}
		// Fim da comparação da digital
	}
	private static DPFPSample getSample(String activeReader, String prompt)
			throws InterruptedException {
		final LinkedBlockingQueue<DPFPSample> samples = new LinkedBlockingQueue<DPFPSample>();
		DPFPCapture capture = DPFPGlobal.getCaptureFactory().createCapture();
		capture.setReaderSerialNumber(activeReader);
		capture.setPriority(DPFPCapturePriority.CAPTURE_PRIORITY_LOW);
		capture.addDataListener(new DPFPDataListener() {
			public void dataAcquired(DPFPDataEvent e) {
				if (e != null && e.getSample() != null) {
					try {
						samples.put(e.getSample());
					} catch (InterruptedException e1) {
						e1.printStackTrace();
					}
				}
			}
		});
		capture.addReaderStatusListener(new DPFPReaderStatusAdapter() {
			int lastStatus = DPFPReaderStatusEvent.READER_CONNECTED;
			public void readerConnected(DPFPReaderStatusEvent e) {
				if (lastStatus != e.getReaderStatus())
					System.out.println("Leitor conectado!");
				lastStatus = e.getReaderStatus();
			}
			public void readerDisconnected(DPFPReaderStatusEvent e) {
				if (lastStatus != e.getReaderStatus())
					System.out.println("O leitor esta desconectado!");
				lastStatus = e.getReaderStatus();
			}
		});
		try {
			capture.startCapture();
			System.out.print(prompt);
			return samples.take();
		} catch (RuntimeException e) {
			System.out
					.printf("Falha ao iniciar captura. Verifique se o leitor não esta sendo usado por outra aplicação.\n");
			throw e;
		} finally {
			capture.stopCapture();
		}
	}
}
Código do UserInterface
package com.digitalpersona.onetouch.sampleapp;
/**
 * Abstract user interface
 */
public interface UserInterface extends Runnable {
 /**
 * User interface factory
 */
 public static interface Factory {
 /**
 * Creates an object implementing UserInterface interface
 * @param userDatabase user database to be used with the ui
 * @return created instance
 */
 UserInterface createUI(UserDatabase userDatabase);
 }
}
Código do SampleApp
package com.digitalpersona.onetouch.sampleapp;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
/**
 * Creates UserInterface and UserDatabase instances and runs UserInterface.
 */
public class SampleApp {
 private final static String DEFAULT_UI_FACTORY = "com.digitalpersona.onetouch.sampleapp.ConsoleUserInterfaceFactory";
 private final static String DEFAULT_DB_FACTORY = "com.digitalpersona.onetouch.sampleapp.SessionUserDatabaseFactory";
 public static void main (String[] args) {
 ///TODO: parse command line to allow user to specify other factories
 String uiFactoryName = DEFAULT_UI_FACTORY;
 String dbFactoryName = DEFAULT_DB_FACTORY;
 try {
 UserDatabase.Factory dbFactory = (UserDatabase.Factory)Class.forName(dbFactoryName).newInstance();
 UserDatabase userDatabase = dbFactory.createDB();
 UserInterface.Factory uiFactory = (UserInterface.Factory)Class.forName(uiFactoryName).newInstance();
 UserInterface userInterface = uiFactory.createUI(userDatabase);
 ExecutorService exec = Executors.newCachedThreadPool();
 exec.execute(userInterface);
 exec.shutdown();
 } catch (Exception e) {
 e.printStackTrace();
 }
 }
}
Código do ConsoleUserInterfaceFactory
package com.digitalpersona.onetouch.sampleapp;
import com.digitalpersona.onetouch.*;
import com.digitalpersona.onetouch.capture.DPFPCapture;
import com.digitalpersona.onetouch.capture.DPFPCapturePriority;
import com.digitalpersona.onetouch.capture.event.DPFPDataEvent;
import com.digitalpersona.onetouch.capture.event.DPFPDataListener;
import com.digitalpersona.onetouch.capture.event.DPFPReaderStatusAdapter;
import com.digitalpersona.onetouch.capture.event.DPFPReaderStatusEvent;
import com.digitalpersona.onetouch.processing.DPFPEnrollment;
import com.digitalpersona.onetouch.processing.DPFPFeatureExtraction;
import com.digitalpersona.onetouch.processing.DPFPImageQualityException;
import com.digitalpersona.onetouch.readers.DPFPReaderDescription;
import com.digitalpersona.onetouch.readers.DPFPReadersCollection;
import com.digitalpersona.onetouch.verification.DPFPVerification;
import com.digitalpersona.onetouch.verification.DPFPVerificationResult;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.EnumMap;
import java.util.Vector;
import java.util.concurrent.LinkedBlockingQueue;
/**
 * Implementation of UserInterface.Factory interface that creates a console-based user interface
 */
public class ConsoleUserInterfaceFactory implements UserInterface.Factory {
 /**
 * Creates an object implementing UserInterface interface
 *
 * @param userDatabase user database to be used with the ui
 * @return created instance
 */
 public UserInterface createUI(UserDatabase userDatabase) {
 return new ConsoleUserInterface(userDatabase);
 }
 /**
 * Console-based UserInterface
 */
 public static class ConsoleUserInterface 
 	implements UserInterface 
 {
 /**
 * keeps a user database
 */
 private UserDatabase userDatabase;
 /**
 * Constructs an instance
 *
 * @param userDatabase user database to be used with the ui
 */
 public ConsoleUserInterface(UserDatabase userDatabase) {
 this.userDatabase = userDatabase;
 }
 /**
 * When an object implementing interface <code>Runnable</code> is used
 * to create a thread, starting the thread causes the object's
 * <code>run</code> method to be called in that separately executing
 * thread.
 * <p/>
 * The general contract of the method <code>run</code> is that it may
 * take any action whatsoever.
 *
 * @see Thread#run()
 */
 public void run() {
 System.out.println("\n*** Console UI ***");
 String activeReader = null;
 boolean readerSelected = true;
 int res;
 while ((res = MenuShow(mainMenu, MENU_WITH_EXIT)) != exitItem.getValue()) try {
 switch (res) {
 case MAIN_MENU_ADD:
 addUser();
 break;
 case MAIN_MENU_ENROLL:
 if (readerSelected)
 register(activeReader);
 else
 System.out.println("No reader selected");
 break;
 case MAIN_MENU_VERIFY:if (readerSelected)
 verify(activeReader);
 else
 System.out.println("No reader selected");
 break;
 case MAIN_MENU_ENUMERATE:
 listReaders();
 break;
 case MAIN_MENU_SELECT:
 try {
 activeReader = selectReader(activeReader);
 readerSelected = true;
 } catch (IndexOutOfBoundsException e) {
 System.out.println("There are no readers available");
 }
 break;
 }
 } catch (Exception e) { }
 }
 /**
 * Console menu item
 */
 public static class MenuItem
 {
 private String text;
 private int value;
 /**
 * Creates a menu item
 *
 * @param text item text
 * @param value value to return if item is chosen
 */
 public MenuItem(String text, int value) {
 this.text = text;
 this.value = value;
 }
 /**
 * Returns the menu item's text
 *
 * @return menu item text
 */
 public String getText() {
 return text;
 }
 /**
 * Returns the menu item's associated value
 *
 * @return associated value
 */
 public int getValue() {
 return value;
 }
 }
 /**
 * Specifies that menu should be appended with "Back" item
 */
 private static final int MENU_WITH_BACK = 2;
 /**
 * Specifies that menu should be appended with "Exit" item
 */
 private static final int MENU_WITH_EXIT = 1;
 /**
 * "Exit" menu item
 */
 private static final MenuItem exitItem = new MenuItem("Exit the application", -1);
 /**
 * "Back" menu item
 */
 private static final MenuItem backItem = new MenuItem("Return to the previous menu", -2);
 private static final int MAIN_MENU_ENUMERATE = 101;
 private static final int MAIN_MENU_SELECT = 102;
 private static final int MAIN_MENU_ADD = 103;
 private static final int MAIN_MENU_ENROLL = 104;
 private static final int MAIN_MENU_VERIFY = 105;
 private static final Vector<MenuItem> mainMenu;
 static {
 mainMenu = new Vector<MenuItem>();
 mainMenu.add(new MenuItem("List all available readers", MAIN_MENU_ENUMERATE));
 mainMenu.add(new MenuItem("Select a reader", MAIN_MENU_SELECT));
 mainMenu.add(new MenuItem("Add a person to the database", MAIN_MENU_ADD));
 mainMenu.add(new MenuItem("Perform fingerprint enrollment", MAIN_MENU_ENROLL));
 mainMenu.add(new MenuItem("Perform fingerprint verification", MAIN_MENU_VERIFY));
 }
 private static final EnumMap<DPFPFingerIndex, String> fingerNames;
 static {
 	fingerNames = new EnumMap<DPFPFingerIndex, String>(DPFPFingerIndex.class);
 	fingerNames.put(DPFPFingerIndex.LEFT_PINKY,	 "left pinky");
 	fingerNames.put(DPFPFingerIndex.LEFT_RING, "left ring");
 	fingerNames.put(DPFPFingerIndex.LEFT_MIDDLE, "left middle");
 	fingerNames.put(DPFPFingerIndex.LEFT_INDEX, "left index");
 	fingerNames.put(DPFPFingerIndex.LEFT_THUMB, "left thumb");
 	fingerNames.put(DPFPFingerIndex.RIGHT_PINKY, "right pinky");
 	fingerNames.put(DPFPFingerIndex.RIGHT_RING, "right ring");
 	fingerNames.put(DPFPFingerIndex.RIGHT_MIDDLE, "right middle");
 	fingerNames.put(DPFPFingerIndex.RIGHT_INDEX, "right index");
 	fingerNames.put(DPFPFingerIndex.RIGHT_THUMB, "right thumb");
 }
 
 private int MenuShow(Vector<MenuItem> menu, int nMenuFlags) {
 int choice = 0;
 if (menu == null)
 return choice;
 while (true) {
 System.out.println();
 for (int i = 0; i < menu.size(); ++i)
 System.out.printf("%d: %s\n", i + 1, menu.elementAt(i).getText());
 StringBuilder sb = new StringBuilder();
 sb.append(String.format("Choose an option (1 - %d", menu.size()));
 if ((nMenuFlags & MENU_WITH_BACK) != 0) {
 System.out.printf("\nR: %s\n\n", backItem.getText());
 sb.append(", R");
 }
 if ((nMenuFlags & MENU_WITH_EXIT) != 0) {
 System.out.printf("\nE: %s\n\n", exitItem.getText());
 sb.append(", E");
 }
 sb.append("): ");
 String userInput = ShowDialog(sb.toString());
 if ((nMenuFlags & MENU_WITH_EXIT) != 0 && userInput.equalsIgnoreCase("E")) {
 choice = exitItem.getValue();
 break;
 }
 if ((nMenuFlags & MENU_WITH_BACK) != 0 && userInput.equalsIgnoreCase("R")) {
 choice = backItem.getValue();
 break;
 }
 int nInput;
 try {
 nInput = Integer.parseInt(userInput);
 } catch (NumberFormatException e) {
 System.out.printf("\nInvalid input: \"%s\"\n", userInput);
 continue;
 }
 if (nInput < 1 || nInput > menu.size()) {
 System.out.printf("\nIncorrect choice: \"%s\"\n", userInput);
 continue;
 }
 choice = menu.elementAt(nInput - 1).getValue();
 break;
 }
 System.out.println();
 return choice;
 }
 /**
 * Adds user to the database
 */
 private void addUser() {
 System.out.printf("Adding person to the database...\n");
 String username = ShowDialog("Enter a name: ");
 if (userDatabase.addUser(username) != null) {
 System.out.printf("\"%s\" was added to the database.\n", username);
 } else {
 System.out.printf("\"%s\" was not added to the database.\n", username);
 }
 }
 /**
 * register() looks for the user in the database, invokes CreateRegistrationTemplate(),
 * and stores the template in the database.
 *
 * @param activeReader reader to use for fingerprint acquisition
 */
 private void register(String activeReader) {
 System.out.printf("Performing fingerprint enrollment...\n");
 String username = ShowDialog("Enter the name of the person to be enrolled: ");
 UserDatabase.User user = userDatabase.getUser(username);
 if (user == null) {
 System.out.printf("\"%s\" was not found in the database.\n", username);
 } else {
 StringBuilder sb = new StringBuilder();
 for (DPFPFingerIndex finger : DPFPFingerIndex.values()) {
 if (user.getTemplate(finger) != null)
 sb.append(" ").append(fingerName(finger)).append("\n");
 }
 String fingers = sb.toString();
 if (fingers.length() > 0) {
 System.out.printf("The following fingers for \"%s\" have already been enrolled:\n%sChoose a finger to enroll:", username, fingers);
 } else {
 System.out.printf("Nofingers for \"%s\" have been enrolled. Choose a finger to enroll:", username);
 }
 Vector<MenuItem> menu = new Vector<MenuItem>();
 for (DPFPFingerIndex finger : DPFPFingerIndex.values())
 menu.add(new MenuItem(fingerName(finger), finger.ordinal()));
 int nFinger = MenuShow(menu, MENU_WITH_BACK);
 if (nFinger == backItem.getValue()) {
 System.out.printf("Enrollment canceled.\n");
 } else {
 try {
 DPFPFingerIndex finger = DPFPFingerIndex.values()[nFinger];
 DPFPFeatureExtraction featureExtractor = DPFPGlobal.getFeatureExtractionFactory().createFeatureExtraction();
 DPFPEnrollment enrollment = DPFPGlobal.getEnrollmentFactory().createEnrollment();
 String activeReader2 = null;
 
 while (enrollment.getFeaturesNeeded() > 0)
 {
 DPFPSample sample = getSample(activeReader, 
 	String.format("Scan your %s finger (%d remaining)\n", fingerName(finger), enrollment.getFeaturesNeeded()));
 if (sample == null)
 continue;
 DPFPFeatureSet featureSet;
 try {
 featureSet = featureExtractor.createFeatureSet(sample, DPFPDataPurpose.DATA_PURPOSE_ENROLLMENT);
 } catch (DPFPImageQualityException e) {
 System.out.printf("Bad image quality: \"%s\". Try again. \n", e.getCaptureFeedback().toString());
 continue;
 }
 enrollment.addFeatures(featureSet);
 }
 DPFPTemplate template = enrollment.getTemplate();
 user.setTemplate(finger, template);
 System.out.printf("The %s was enrolled.\n", fingerprintName(finger));
 } catch (DPFPImageQualityException e) {
 System.out.printf("Failed to enroll the finger.\n");
 } catch (InterruptedException e) {
 throw new RuntimeException(e);
 }
 }
 }
 }
 /**
 * Acquires fingerprint from the sensor and matches it with the registration templates
 * stored in the database.
 *
 * @param activeReader fingerprint reader to use
 */
 private void verify(String activeReader) {
 System.out.printf("Performing fingerprint verification...\n");
 String username = ShowDialog("Enter the name of the person to be verified: ");
 UserDatabase.User user = userDatabase.getUser(username);
 if (user == null) {
 System.out.printf("\"%s\" was not found in the database.\n", username);
 } else {
 if (user.isEmpty()) {
 System.out.printf("No fingers for \"%s\" have been enrolled.\n", username);
 } else {
 try {
 DPFPSample sample = getSample(activeReader, "Scan your finger\n");
 if (sample == null)
 throw new Exception();
 DPFPFeatureExtraction featureExtractor = DPFPGlobal.getFeatureExtractionFactory().createFeatureExtraction();
 DPFPFeatureSet featureSet = featureExtractor.createFeatureSet(sample, DPFPDataPurpose.DATA_PURPOSE_VERIFICATION);
 DPFPVerification matcher = DPFPGlobal.getVerificationFactory().createVerification();
 matcher.setFARRequested(DPFPVerification.MEDIUM_SECURITY_FAR);
 
 for (DPFPFingerIndex finger : DPFPFingerIndex.values()) {
 DPFPTemplate template = user.getTemplate(finger);
 if (template != null) {
 DPFPVerificationResult result = matcher.verify(featureSet, template);
 if (result.isVerified()) {
 System.out.printf("Matching finger: %s, FAR achieved: %g.\n",
 		fingerName(finger), (double)result.getFalseAcceptRate()/DPFPVerification.PROBABILITY_ONE);
 return;
 }
 }
 }
 } catch (Exception e) {
 System.out.printf("Failed to perform verification.");
 }
 System.out.printf("No matching fingers for \"%s\" were found.\n", username);
 }
 }
 }
 /**
 * Prints information on all available readers
 */
 private void listReaders() {
 DPFPReadersCollection readers = DPFPGlobal.getReadersFactory().getReaders();
 if (readers == null || readers.size() == 0) {
 System.out.printf("There are no readers available.\n");
 return;
 }
 System.out.printf("Available readers:\n");
 for (DPFPReaderDescription readerDescription : readers)
 System.out.println(readerDescription.getSerialNumber());
 }
 /**
 * selectReader() stores chosen reader in *pActiveReader
 * @param activeReader currently selected reader
 * @return reader selected
 * @throws IndexOutOfBoundsException if no reader available
 */
 String selectReader(String activeReader) throws IndexOutOfBoundsException {
 DPFPReadersCollection readers = DPFPGlobal.getReadersFactory().getReaders();
 if (readers == null || readers.size() == 0)
 throw new IndexOutOfBoundsException("There are no readers available");
 Vector<MenuItem> menu = new Vector<MenuItem>();
 for (DPFPReaderDescription readerDescription : readers)
 menu.add(new MenuItem(readerDescription.getSerialNumber(), menu.size()));
 menu.add(new MenuItem("Any available readers", menu.size()));
 int res = MenuShow(menu, MENU_WITH_BACK);
 if (res == backItem.getValue()) {
 return activeReader;
 } else if (res == readers.size()) {
 return null;
 } else {
 return readers.get(res).getSerialNumber();
 }
 }
 /**
 * Acquires a fingerprint sample from the specified fingerprint reader
 *
 * @param activeReader Fingerprint reader to use for acquisition
 * @return sample acquired
 * @throws InterruptedException if thread is interrupted
 */
 private DPFPSample getSample(String activeReader, String prompt)
 	throws InterruptedException
 {
 final LinkedBlockingQueue<DPFPSample> samples = new LinkedBlockingQueue<DPFPSample>();
 DPFPCapture capture = DPFPGlobal.getCaptureFactory().createCapture();
 capture.setReaderSerialNumber(activeReader);
 capture.setPriority(DPFPCapturePriority.CAPTURE_PRIORITY_LOW);
 capture.addDataListener(new DPFPDataListener()
 {
 public void dataAcquired(DPFPDataEvent e) {
 if (e != null && e.getSample() != null) {
 try {
 samples.put(e.getSample());
 } catch (InterruptedException e1) {
 e1.printStackTrace();

Continue navegando