package com.iailab.netsdk.demo.frame.Attendance; import java.awt.BorderLayout; import java.awt.Dimension; import java.awt.FlowLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import java.util.Timer; import java.util.TimerTask; import java.util.concurrent.locks.ReentrantLock; import javax.swing.JButton; import javax.swing.JDialog; import javax.swing.JLabel; import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swing.SwingUtilities; import com.iailab.netsdk.common.BorderEx; import com.iailab.netsdk.common.Res; import com.iailab.netsdk.demo.module.AlarmListenModule; import com.iailab.netsdk.demo.module.AttendanceModule; import com.iailab.netsdk.lib.NetSDKLib; import com.iailab.netsdk.lib.NetSDKLib.ALARM_CAPTURE_FINGER_PRINT_INFO; import com.iailab.netsdk.lib.NetSDKLib.LLong; import com.iailab.netsdk.lib.NetSDKLib.fMessCallBack; import com.iailab.netsdk.lib.ToolKits; import com.sun.jna.NativeLong; import com.sun.jna.Pointer; /** * 添加信息信息 */ public class AddFingerPrintDialog extends JDialog{ /** * */ private static final long serialVersionUID = 1L; private static final int CHANNEL_ID = 0; // 门禁序号 private static final String READER_ID = "1"; // 读卡器ID private static final long TIMER_DELAY = 30000; // 定时器超时时间 private String userID = null; private byte []collectionData = null; private Timer timer = new Timer(); // 信息采集定时器 private ReentrantLock lock = new ReentrantLock(); public AddFingerPrintDialog(String userId) { setTitle(Res.string().getAddFingerPrint()); setLayout(new BorderLayout()); setModal(true); pack(); setSize(300, 180); setResizable(false); setLocationRelativeTo(null); setDefaultCloseOperation(DISPOSE_ON_CLOSE); //////////采集面板 ///////////////// JPanel collectionPanel = new JPanel(); BorderEx.set(collectionPanel, Res.string().getcFingerPrintCollection(), 4); collectionPanel.setLayout(new FlowLayout(FlowLayout.CENTER, 35, 25)); collectionBtn = new JButton(Res.string().getStartCollection()); collectionBtn.setPreferredSize(new Dimension(150, 20)); promptLabel = new JLabel(); promptLabel.setPreferredSize(new Dimension(150, 20)); promptLabel.setHorizontalAlignment(JLabel.CENTER); collectionPanel.add(collectionBtn); collectionPanel.add(promptLabel); //////////功能面板 ///////////////// JPanel functionPanel = new JPanel(); addBtn = new JButton(Res.string().getAdd()); cancelBtn = new JButton(Res.string().getCancel()); addBtn.setPreferredSize(new Dimension(100, 20)); cancelBtn.setPreferredSize(new Dimension(100, 20)); functionPanel.add(addBtn); functionPanel.add(cancelBtn); add(collectionPanel, BorderLayout.CENTER); add(functionPanel, BorderLayout.SOUTH); addBtn.setEnabled(false); userID = userId; cbMessage = new fCollectionDataCB(); collectionBtn.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { collectionFinger(); } }); addBtn.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { if (AttendanceModule.insertFingerByUserId(userID, collectionData)) { JOptionPane.showMessageDialog(null, Res.string().getSucceed(), Res.string().getPromptMessage(), JOptionPane.INFORMATION_MESSAGE); } else { JOptionPane.showMessageDialog(null, Res.string().getFailed() , Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE); } dispose(); } }); cancelBtn.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { AlarmListenModule.stopListen(); timer.cancel(); dispose(); } }); addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { AlarmListenModule.stopListen(); timer.cancel(); dispose(); } }); } public void collectionFinger() { if (!AlarmListenModule.startListen(cbMessage)) { JOptionPane.showMessageDialog(null, Res.string().getCollectionFailed() + "," + ToolKits.getErrorCodeShow(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE); return; } collectionData = null; if (!AttendanceModule.collectionFinger(CHANNEL_ID, READER_ID)) { JOptionPane.showMessageDialog(null, Res.string().getCollectionFailed() + "," + ToolKits.getErrorCodeShow(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE); return; } SwingUtilities.invokeLater(new Runnable() { public void run() { promptLabel.setText(Res.string().getInCollection()); collectionBtn.setEnabled(false); } }); timer.schedule(new TimerTask() { public void run() { lock.lock(); if (collectionData == null) { AlarmListenModule.stopListen(); promptLabel.setText(Res.string().getCollectionFailed()); collectionBtn.setEnabled(true); } lock.unlock(); } }, TIMER_DELAY); } /** * 信息采集监听回调 **/ private class fCollectionDataCB implements fMessCallBack{ @Override public boolean invoke(int lCommand, LLong lLoginID, Pointer pStuEvent, int dwBufLen, String strDeviceIP, NativeLong nDevicePort, Pointer dwUser) { if (lCommand == NetSDKLib.NET_ALARM_FINGER_PRINT) { lock.lock(); if (collectionData == null) { timer.cancel(); ALARM_CAPTURE_FINGER_PRINT_INFO msg = new ALARM_CAPTURE_FINGER_PRINT_INFO(); ToolKits.GetPointerData(pStuEvent, msg); collectionData = new byte[msg.nPacketLen * msg.nPacketNum]; msg.szFingerPrintInfo.read(0, collectionData, 0, msg.nPacketLen * msg.nPacketNum); SwingUtilities.invokeLater(new Runnable() { public void run() { AlarmListenModule.stopListen(); promptLabel.setText(Res.string().getcCompleteCollection()); addBtn.setEnabled(true); } }); } lock.unlock(); } return true; } } private fMessCallBack cbMessage; // 信息采集回调 private JLabel promptLabel; // 提示信息 private JButton collectionBtn; // 采集按钮 private JButton addBtn; // 添加按钮 private JButton cancelBtn; // 取消按钮 }