package com.iailab.netsdk.demo.frame; import java.awt.BorderLayout; import java.awt.Dimension; import java.awt.GridLayout; 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.Vector; import javax.swing.DefaultComboBoxModel; import javax.swing.JButton; import javax.swing.JComboBox; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swing.JProgressBar; import javax.swing.JScrollPane; import javax.swing.JTable; import javax.swing.ListSelectionModel; import javax.swing.SwingUtilities; import javax.swing.UIManager; import javax.swing.border.EmptyBorder; import javax.swing.table.DefaultTableCellRenderer; import javax.swing.table.DefaultTableModel; import com.iailab.netsdk.common.*; import com.iailab.netsdk.demo.module.DownLoadRecordModule; import com.iailab.netsdk.demo.module.LoginModule; import com.iailab.netsdk.lib.*; import com.iailab.netsdk.lib.NetSDKLib.LLong; import com.sun.jna.CallbackThreadInitializer; import com.sun.jna.Native; import com.sun.jna.Pointer; import com.sun.jna.ptr.IntByReference; /* * 下载录像Demo */ class DownLoadRecordFrame extends JFrame{ private static final long serialVersionUID = 1L; private Vector chnlist = new Vector(); private DefaultTableModel model; private LLong m_hDownLoadByTimeHandle = new LLong(0); // 按时间下载句柄 private LLong m_hDownLoadByFileHandle = new LLong(0); // 按文件下载句柄 private boolean b_downloadByTime = false; private boolean b_downloadByFile = false; private IntByReference nFindCount = new IntByReference(0); // 设备断线通知回调 private DisConnect disConnect = new DisConnect(); // 网络连接恢复 private static HaveReConnect haveReConnect = new HaveReConnect(); // 开始时间 private NetSDKLib.NET_TIME stTimeStart = new NetSDKLib.NET_TIME(); // 结束时间 private NetSDKLib.NET_TIME stTimeEnd = new NetSDKLib.NET_TIME(); // 录像文件信息 private NetSDKLib.NET_RECORDFILE_INFO[] stFileInfo = (NetSDKLib.NET_RECORDFILE_INFO[])new NetSDKLib.NET_RECORDFILE_INFO().toArray(2000); Object[][] data = null; // 获取界面窗口 private static JFrame frame = new JFrame(); public DownLoadRecordFrame() { setTitle(Res.string().getDownloadRecord()); setLayout(new BorderLayout()); pack(); setSize(800, 560); setResizable(false); setLocationRelativeTo(null); LoginModule.init(disConnect, haveReConnect); // 打开工程,初始化 try { UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); } catch (Exception e) { e.printStackTrace(); } loginPanel = new LoginPanel(); downloadRecordPanel = new DownLoadRecordPanel(); add(loginPanel, BorderLayout.NORTH); add(downloadRecordPanel, BorderLayout.CENTER); loginPanel.addLoginBtnActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { if(loginPanel.checkLoginText()) { if(login()) { frame = ToolKits.getFrame(e); frame.setTitle(Res.string().getDownloadRecord() + " : " + Res.string().getOnline()); } } } }); loginPanel.addLogoutBtnActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { frame.setTitle(Res.string().getDownloadRecord()); logout(); } }); addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { DownLoadRecordModule.stopDownLoadRecordFile(m_hDownLoadByFileHandle); DownLoadRecordModule.stopDownLoadRecordFile(m_hDownLoadByTimeHandle); LoginModule.logout(); LoginModule.cleanup(); // 关闭工程,释放资源 dispose(); SwingUtilities.invokeLater(new Runnable() { public void run() { FunctionList demo = new FunctionList(); demo.setVisible(true); } }); } }); } /////////////////面板////////////////// // 设备断线回调: 通过 CLIENT_Init 设置该回调函数,当设备出现断线时,SDK会调用该函数 private class DisConnect implements NetSDKLib.fDisConnect { public void invoke(LLong m_hLoginHandle, String pchDVRIP, int nDVRPort, Pointer dwUser) { System.out.printf("Device[%s] Port[%d] DisConnect!\n", pchDVRIP, nDVRPort); // 断线提示 SwingUtilities.invokeLater(new Runnable() { public void run() { frame.setTitle(Res.string().getDownloadRecord() + " : " + Res.string().getDisConnectReconnecting()); setButtonEnable(true); b_downloadByFile = false; downloadByFileBtn.setText(Res.string().getDownload()); b_downloadByTime = false; downloadByTimeBtn.setText(Res.string().getDownload()); DownLoadRecordModule.stopDownLoadRecordFile(m_hDownLoadByFileHandle); DownLoadRecordModule.stopDownLoadRecordFile(m_hDownLoadByTimeHandle); } }); } } // 网络连接恢复,设备重连成功回调 // 通过 CLIENT_SetAutoReconnect 设置该回调函数,当已断线的设备重连成功时,SDK会调用该函数 private static class HaveReConnect implements NetSDKLib.fHaveReConnect { public void invoke(LLong m_hLoginHandle, String pchDVRIP, int nDVRPort, Pointer dwUser) { System.out.printf("ReConnect Device[%s] Port[%d]\n", pchDVRIP, nDVRPort); // 重连提示 SwingUtilities.invokeLater(new Runnable() { public void run() { frame.setTitle(Res.string().getDownloadRecord() + " : " + Res.string().getOnline()); } }); } } // 登录 public boolean login() { Native.setCallbackThreadInitializer(m_DownLoadPosByFile, new CallbackThreadInitializer(false, false, "downloadbyfile callback thread")); Native.setCallbackThreadInitializer(m_DownLoadPosByTime, new CallbackThreadInitializer(false, false, "downloadbytime callback thread")); if(LoginModule.login(loginPanel.ipTextArea.getText(), Integer.parseInt(loginPanel.portTextArea.getText()), loginPanel.nameTextArea.getText(), new String(loginPanel.passwordTextArea.getPassword()))) { loginPanel.setButtonEnable(true); setButtonEnable(true); for(int i = 1; i < LoginModule.m_stDeviceInfo.byChanNum + 1; i++) { chnlist.add(Res.string().getChannel() + " " + String.valueOf(i)); } // 默认设置主辅码流 DownLoadRecordModule.setStreamType(streamComboBoxByFile.getSelectedIndex()); // 登陆成功,将通道添加到控件 chnComboBoxByFile.setModel(new DefaultComboBoxModel(chnlist)); chnComboBoxByTime.setModel(new DefaultComboBoxModel(chnlist)); } else { JOptionPane.showMessageDialog(null, Res.string().getLoginFailed() + ", " + ToolKits.getErrorCodeShow(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE); return false; } return true; } //登出 public void logout() { LoginModule.logout(); loginPanel.setButtonEnable(false); setButtonEnable(false); // 列表清空 data = new Object[14][5]; table.setModel(new DefaultTableModel(data, Res.string().getDownloadTableName())); table.getColumnModel().getColumn(0).setPreferredWidth(23); table.getColumnModel().getColumn(1).setPreferredWidth(28); table.getColumnModel().getColumn(2).setPreferredWidth(50); for(int i = 0; i < LoginModule.m_stDeviceInfo.byChanNum; i++) { chnlist.clear(); } chnComboBoxByFile.setModel(new DefaultComboBoxModel()); chnComboBoxByTime.setModel(new DefaultComboBoxModel()); b_downloadByFile = false; downloadByFileBtn.setText(Res.string().getDownload()); b_downloadByTime = false; downloadByTimeBtn.setText(Res.string().getDownload()); } /* * 下载录像面板 */ private class DownLoadRecordPanel extends JPanel { private static final long serialVersionUID = 1L; public DownLoadRecordPanel() { BorderEx.set(this, Res.string().getDownloadRecord(), 2); setLayout(new GridLayout(1, 2)); downloadByTimePanel = new DownLoadByTimePanel(); // 按时间下载 downloadByFilePanel = new DownLoadByFilePanel(); // 按文件下载 add(downloadByTimePanel); add(downloadByFilePanel); } } /* * 按文件下载面板 */ private class DownLoadByFilePanel extends JPanel { private static final long serialVersionUID = 1L; public DownLoadByFilePanel() { BorderEx.set(this, Res.string().getDownloadByFile(), 2); setLayout(new BorderLayout()); downloadByFileSetPanel = new JPanel(); // 设置 queryPanel = new JPanel(); // 查询 downByFilePanel = new JPanel(); // 下载 add(downloadByFileSetPanel, BorderLayout.NORTH); add(queryPanel, BorderLayout.CENTER); add(downByFilePanel, BorderLayout.SOUTH); /******** 设置面板***********/ JPanel startTimeByFile = new JPanel(); JPanel endTimeByFile = new JPanel(); JPanel chnByFile = new JPanel(); JPanel streamByFile = new JPanel(); downloadByFileSetPanel.setLayout(new GridLayout(2, 2)); downloadByFileSetPanel.add(startTimeByFile); downloadByFileSetPanel.add(endTimeByFile); downloadByFileSetPanel.add(chnByFile); downloadByFileSetPanel.add(streamByFile); // 开始时间设置 startTimeByFile.setBorder(new EmptyBorder(5, 5, 5, 20)); startTimeByFile.setLayout(new GridLayout(2, 1)); JLabel startLabel = new JLabel(Res.string().getStartTime()); dateChooserStartByFile = new DateChooserJButton(); Dimension dimension = new Dimension(); dimension.height = 20; dateChooserStartByFile.setPreferredSize(dimension); startTimeByFile.add(startLabel); startTimeByFile.add(dateChooserStartByFile); // 结束时间设置 endTimeByFile.setBorder(new EmptyBorder(5, 20, 5, 5)); endTimeByFile.setLayout(new GridLayout(2, 1)); JLabel endLabel = new JLabel(Res.string().getEndTime()); dateChooserEndByFile = new DateChooserJButton(); dateChooserEndByFile.setPreferredSize(dimension); endTimeByFile.add(endLabel); endTimeByFile.add(dateChooserEndByFile); // 通道设置 chnByFile.setBorder(new EmptyBorder(5, 10, 0, 5)); chnByFile.setLayout(new FlowLayout()); chnlabel = new JLabel(Res.string().getChannel()); chnComboBoxByFile = new JComboBox(); chnComboBoxByFile.setPreferredSize(new Dimension(115, 20)); chnByFile.add(chnlabel); chnByFile.add(chnComboBoxByFile); // 码流设置 streamByFile.setBorder(new EmptyBorder(5, 10, 0, 5)); streamByFile.setLayout(new FlowLayout()); streamLabel = new JLabel(Res.string().getStreamType()); String[] stream = {Res.string().getMasterAndSub(), Res.string().getMasterStream(), Res.string().getSubStream()}; streamComboBoxByFile = new JComboBox(stream); streamComboBoxByFile.setModel(new DefaultComboBoxModel(stream)); streamComboBoxByFile.setPreferredSize(new Dimension(115, 20)); streamByFile.add(streamLabel); streamByFile.add(streamComboBoxByFile); /******** 查询面板***********/ queryPanel.setLayout(new BorderLayout()); queryPanel.setBorder(new EmptyBorder(0, 5, 5, 5)); data = new Object[14][5]; defaultmodel = new DefaultTableModel(data, Res.string().getDownloadTableName()); table = new JTable(defaultmodel){ private static final long serialVersionUID = 1L; @Override public boolean isCellEditable(int row, int column) { return false; } }; table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); // 只能选中一行 table.getColumnModel().getColumn(0).setPreferredWidth(20); table.getColumnModel().getColumn(1).setPreferredWidth(20); table.getColumnModel().getColumn(2).setPreferredWidth(50); DefaultTableCellRenderer dCellRenderer = new DefaultTableCellRenderer(); dCellRenderer.setHorizontalAlignment(JLabel.CENTER); table.setDefaultRenderer(Object.class, dCellRenderer); queryPanel.add(new JScrollPane(table), BorderLayout.CENTER); /******** 下载面板***********/ downByFilePanel.setLayout(new BorderLayout()); downByFilePanel.setBorder(new EmptyBorder(5, 5, 5, 5)); JPanel btnPanel1 = new JPanel(); downloadByFileProgressBar = new JProgressBar(0, 100); downloadByFileProgressBar.setPreferredSize(new Dimension(100, 20)); downloadByFileProgressBar.setStringPainted(true); downByFilePanel.add(btnPanel1, BorderLayout.CENTER); downByFilePanel.add(downloadByFileProgressBar, BorderLayout.SOUTH); // 查询、下载按钮 queryRecordBtn = new JButton(Res.string().getQuery()); downloadByFileBtn = new JButton(Res.string().getDownload()); queryRecordBtn.setPreferredSize(new Dimension(175, 20)); downloadByFileBtn.setPreferredSize(new Dimension(175, 20)); btnPanel1.setLayout(new FlowLayout()); btnPanel1.add(queryRecordBtn); btnPanel1.add(downloadByFileBtn); queryRecordBtn.setEnabled(false); downloadByFileBtn.setEnabled(false); downloadByFileProgressBar.setEnabled(false); chnComboBoxByFile.setEnabled(false); streamComboBoxByFile.setEnabled(false); dateChooserStartByFile.setEnabled(false); dateChooserEndByFile.setEnabled(false); streamComboBoxByFile.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { DownLoadRecordModule.setStreamType(streamComboBoxByFile.getSelectedIndex()); } }); queryRecordBtn.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent arg0) { int i = 1; // 列表序号 int time = 0; System.out.println(dateChooserStartByFile.getText() + "\n" + dateChooserEndByFile.getText()); // 开始时间 String[] dateStartByFile = dateChooserStartByFile.getText().split(" "); String[] dateStart1 = dateStartByFile[0].split("-"); String[] dateStart2 = dateStartByFile[1].split(":"); stTimeStart.dwYear = Integer.parseInt(dateStart1[0]); stTimeStart.dwMonth = Integer.parseInt(dateStart1[1]); stTimeStart.dwDay = Integer.parseInt(dateStart1[2]); stTimeStart.dwHour = Integer.parseInt(dateStart2[0]); stTimeStart.dwMinute = Integer.parseInt(dateStart2[1]); stTimeStart.dwSecond = Integer.parseInt(dateStart2[2]); // 结束时间 String[] dateEndByFile = dateChooserEndByFile.getText().split(" "); String[] dateEnd1 = dateEndByFile[0].split("-"); String[] dateEnd2 = dateEndByFile[1].split(":"); stTimeEnd.dwYear = Integer.parseInt(dateEnd1[0]); stTimeEnd.dwMonth = Integer.parseInt(dateEnd1[1]); stTimeEnd.dwDay = Integer.parseInt(dateEnd1[2]); stTimeEnd.dwHour = Integer.parseInt(dateEnd2[0]); stTimeEnd.dwMinute = Integer.parseInt(dateEnd2[1]); stTimeEnd.dwSecond = Integer.parseInt(dateEnd2[2]); if(stTimeStart.dwYear != stTimeEnd.dwYear || stTimeStart.dwMonth != stTimeEnd.dwMonth || (stTimeEnd.dwDay - stTimeStart.dwDay > 1)) { JOptionPane.showMessageDialog(null, Res.string().getSelectTimeAgain(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE); return; } if(stTimeEnd.dwDay - stTimeStart.dwDay == 1) { time = (24 + stTimeEnd.dwHour)*60*60 + stTimeEnd.dwMinute*60 + stTimeEnd.dwSecond - stTimeStart.dwHour*60*60 - stTimeStart.dwMinute*60 - stTimeStart.dwSecond; } else { time = stTimeEnd.dwHour*60*60 + stTimeEnd.dwMinute*60 + stTimeEnd.dwSecond - stTimeStart.dwHour*60*60 - stTimeStart.dwMinute*60 - stTimeStart.dwSecond; } if(time > 6 * 60 * 60 || time <= 0) { JOptionPane.showMessageDialog(null, Res.string().getSelectTimeAgain(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE); return; } if(!DownLoadRecordModule.queryRecordFile(chnComboBoxByFile.getSelectedIndex(), stTimeStart, stTimeEnd, stFileInfo, nFindCount)) { // 列表清空 data = new Object[14][5]; table.setModel(new DefaultTableModel(data, Res.string().getDownloadTableName())); table.getColumnModel().getColumn(0).setPreferredWidth(23); table.getColumnModel().getColumn(1).setPreferredWidth(28); table.getColumnModel().getColumn(2).setPreferredWidth(50); JOptionPane.showMessageDialog(null, ToolKits.getErrorCodeShow(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE); } else { System.out.println(nFindCount.getValue()); int count = 0; if(nFindCount.getValue() > 14) { count = nFindCount.getValue(); } else { count = 14; } data = new Object[count][5]; table.setModel(new DefaultTableModel(data, Res.string().getDownloadTableName())); table.getColumnModel().getColumn(0).setPreferredWidth(23); table.getColumnModel().getColumn(1).setPreferredWidth(28); table.getColumnModel().getColumn(2).setPreferredWidth(50); if(nFindCount.getValue() == 0) { return; } model = (DefaultTableModel)table.getModel(); for(int j = 0; j < nFindCount.getValue(); j++) { model.setValueAt(String.valueOf(i), j, 0); model.setValueAt(String.valueOf(stFileInfo[j].ch + 1), j, 1); // 设备返回的通道加1 model.setValueAt(Res.string().getRecordTypeStr(stFileInfo[j].nRecordFileType), j, 2); model.setValueAt(stFileInfo[j].starttime.toStringTime(), j, 3); model.setValueAt(stFileInfo[j].endtime.toStringTime(), j, 4); i++; } } } }); downloadByFileBtn.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { int row = -1; row = table.getSelectedRow(); //获得所选的单行 if(model == null) { JOptionPane.showMessageDialog(null, Res.string().getQueryRecord(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE); return; } if(row < 0) { JOptionPane.showMessageDialog(null, Res.string().getSelectRowWithData(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE); return; } for(int m = 1; m < 5; m++) { if(model.getValueAt(row, m) == null || String.valueOf(model.getValueAt(row, m)).trim().equals("")) { JOptionPane.showMessageDialog(null, Res.string().getSelectRowWithData(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE); return; } } // 开始时间 String[] dateStart = String.valueOf(model.getValueAt(row, 3)).split(" "); String[] dateStartByFile1 = dateStart[0].split("/"); String[] dateStartByFile2 = dateStart[1].split(":"); stTimeStart.dwYear = Integer.parseInt(dateStartByFile1[0]); stTimeStart.dwMonth = Integer.parseInt(dateStartByFile1[1]); stTimeStart.dwDay = Integer.parseInt(dateStartByFile1[2]); stTimeStart.dwHour = Integer.parseInt(dateStartByFile2[0]); stTimeStart.dwMinute = Integer.parseInt(dateStartByFile2[1]); stTimeStart.dwSecond = Integer.parseInt(dateStartByFile2[2]); // 结束时间 String[] dateEnd = String.valueOf(model.getValueAt(row, 4)).split(" "); String[] dateEndByFile1 = dateEnd[0].split("/"); String[] dateEndByFile2 = dateEnd[1].split(":"); stTimeEnd.dwYear = Integer.parseInt(dateEndByFile1[0]); stTimeEnd.dwMonth = Integer.parseInt(dateEndByFile1[1]); stTimeEnd.dwDay = Integer.parseInt(dateEndByFile1[2]); stTimeEnd.dwHour = Integer.parseInt(dateEndByFile2[0]); stTimeEnd.dwMinute = Integer.parseInt(dateEndByFile2[1]); stTimeEnd.dwSecond = Integer.parseInt(dateEndByFile2[2]); if(!b_downloadByFile) { System.out.println("ByFile" + String.valueOf(model.getValueAt(row, 3)) + "\n" + String.valueOf(model.getValueAt(row, 4))); SwingUtilities.invokeLater(new Runnable() { @Override public void run() { downloadByFileProgressBar.setValue(0); } }); m_hDownLoadByFileHandle = DownLoadRecordModule.downloadRecordFile(Integer.parseInt(String.valueOf(model.getValueAt(row, 1))) - 1, Res.string().getRecordTypeInt(String.valueOf(model.getValueAt(row, 2))), stTimeStart, stTimeEnd, SavePath.getSavePath().getSaveRecordFilePath(), m_DownLoadPosByFile); if(m_hDownLoadByFileHandle.longValue() != 0) { b_downloadByFile = true; downloadByFileBtn.setText(Res.string().getStopDownload()); } else { JOptionPane.showMessageDialog(null, ToolKits.getErrorCodeShow(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE); } } else { DownLoadRecordModule.stopDownLoadRecordFile(m_hDownLoadByFileHandle); b_downloadByFile = false; downloadByFileBtn.setText(Res.string().getDownload()); SwingUtilities.invokeLater(new Runnable() { @Override public void run() { downloadByFileProgressBar.setValue(0); } }); } } }); } } /* * 按时间下载面板 */ private class DownLoadByTimePanel extends JPanel { private static final long serialVersionUID = 1L; public DownLoadByTimePanel() { BorderEx.set(this, Res.string().getDownloadByTime(), 2); setLayout(new BorderLayout()); downloadByTimeSetPanel = new JPanel(); // 设置 downByTimePanel = new JPanel(); // 下载 add(downloadByTimeSetPanel, BorderLayout.NORTH); add(downByTimePanel, BorderLayout.CENTER); /******** 设置面板***********/ JPanel startTimeByTime = new JPanel(); JPanel endTimeByTime = new JPanel(); JPanel chnByTime = new JPanel(); JPanel streamByTime = new JPanel(); downloadByTimeSetPanel.setLayout(new GridLayout(2, 2)); downloadByTimeSetPanel.add(startTimeByTime); downloadByTimeSetPanel.add(endTimeByTime); downloadByTimeSetPanel.add(chnByTime); downloadByTimeSetPanel.add(streamByTime); // 开始时间设置 startTimeByTime.setBorder(new EmptyBorder(5, 5, 5, 20)); startTimeByTime.setLayout(new GridLayout(2, 1)); JLabel startLabel = new JLabel(Res.string().getStartTime()); dateChooserStartByTime = new DateChooserJButton(); Dimension dimension = new Dimension(); dimension.height = 20; dateChooserStartByTime.setPreferredSize(dimension); startTimeByTime.add(startLabel); startTimeByTime.add(dateChooserStartByTime); // 结束时间设置 endTimeByTime.setBorder(new EmptyBorder(5, 20, 5, 5)); endTimeByTime.setLayout(new GridLayout(2, 1)); JLabel endLabel = new JLabel(Res.string().getEndTime()); dateChooserEndByTime = new DateChooserJButton(); dateChooserEndByTime.setPreferredSize(dimension); endTimeByTime.add(endLabel); endTimeByTime.add(dateChooserEndByTime); // 通道设置 chnByTime.setBorder(new EmptyBorder(5, 10, 0, 5)); chnByTime.setLayout(new FlowLayout()); chnlabel = new JLabel(Res.string().getChannel()); chnComboBoxByTime = new JComboBox(); chnComboBoxByTime.setPreferredSize(new Dimension(115, 20)); chnByTime.add(chnlabel); chnByTime.add(chnComboBoxByTime); // 码流设置 streamByTime.setBorder(new EmptyBorder(5, 10, 0, 5)); streamByTime.setLayout(new FlowLayout()); streamLabel = new JLabel(Res.string().getStreamType()); String[] stream = {Res.string().getMasterAndSub(), Res.string().getMasterStream(), Res.string().getSubStream()}; streamComboBoxByTime = new JComboBox(); streamComboBoxByTime.setModel(new DefaultComboBoxModel(stream)); streamComboBoxByTime.setPreferredSize(new Dimension(115, 20)); streamByTime.add(streamLabel); streamByTime.add(streamComboBoxByTime); /******** 下载面板***********/ downByTimePanel.setLayout(new FlowLayout()); downByTimePanel.setBorder(new EmptyBorder(0, 5, 0, 5)); JPanel btnPanel2 = new JPanel(); downloadByTimeProgressBar = new JProgressBar(0, 100); downloadByTimeProgressBar.setPreferredSize(new Dimension(355, 20)); downloadByTimeProgressBar.setStringPainted(true); downByTimePanel.add(btnPanel2); downByTimePanel.add(downloadByTimeProgressBar); // 下载按钮 downloadByTimeBtn = new JButton(Res.string().getDownload()); JLabel nullLabel = new JLabel(); nullLabel.setPreferredSize(new Dimension(180, 20)); downloadByTimeBtn.setPreferredSize(new Dimension(170, 20)); btnPanel2.setLayout(new FlowLayout()); btnPanel2.add(downloadByTimeBtn); btnPanel2.add(nullLabel); downloadByTimeBtn.setEnabled(false); downloadByTimeProgressBar.setEnabled(false); chnComboBoxByTime.setEnabled(false); streamComboBoxByTime.setEnabled(false); dateChooserStartByTime.setEnabled(false); dateChooserEndByTime.setEnabled(false); streamComboBoxByTime.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { DownLoadRecordModule.setStreamType(streamComboBoxByTime.getSelectedIndex()); } }); downloadByTimeBtn.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { int time = 0; // 开始时间 String[] dateStartByTime = dateChooserStartByTime.getText().split(" "); String[] dateStart1 = dateStartByTime[0].split("-"); String[] dateStart2 = dateStartByTime[1].split(":"); stTimeStart.dwYear = Integer.parseInt(dateStart1[0]); stTimeStart.dwMonth = Integer.parseInt(dateStart1[1]); stTimeStart.dwDay = Integer.parseInt(dateStart1[2]); stTimeStart.dwHour = Integer.parseInt(dateStart2[0]); stTimeStart.dwMinute = Integer.parseInt(dateStart2[1]); stTimeStart.dwSecond = Integer.parseInt(dateStart2[2]); // 结束时间 String[] dateEndByTime = dateChooserEndByTime.getText().split(" "); String[] dateEnd1 = dateEndByTime[0].split("-"); String[] dateEnd2 = dateEndByTime[1].split(":"); stTimeEnd.dwYear = Integer.parseInt(dateEnd1[0]); stTimeEnd.dwMonth = Integer.parseInt(dateEnd1[1]); stTimeEnd.dwDay = Integer.parseInt(dateEnd1[2]); stTimeEnd.dwHour = Integer.parseInt(dateEnd2[0]); stTimeEnd.dwMinute = Integer.parseInt(dateEnd2[1]); stTimeEnd.dwSecond = Integer.parseInt(dateEnd2[2]); if(stTimeStart.dwYear != stTimeEnd.dwYear || stTimeStart.dwMonth != stTimeEnd.dwMonth || (stTimeEnd.dwDay - stTimeStart.dwDay) > 1) { JOptionPane.showMessageDialog(null, Res.string().getSelectTimeAgain(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE); return; } if(stTimeEnd.dwDay - stTimeStart.dwDay == 1) { time = (24 + stTimeEnd.dwHour)*60*60 + stTimeEnd.dwMinute*60 + stTimeEnd.dwSecond - stTimeStart.dwHour*60*60 - stTimeStart.dwMinute*60 - stTimeStart.dwSecond; } else { time = stTimeEnd.dwHour*60*60 + stTimeEnd.dwMinute*60 + stTimeEnd.dwSecond - stTimeStart.dwHour*60*60 - stTimeStart.dwMinute*60 - stTimeStart.dwSecond; } System.out.println("time :" + time); if(time > 6 * 60 * 60 || time <= 0) { JOptionPane.showMessageDialog(null, Res.string().getSelectTimeAgain(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE); return; } if(!b_downloadByTime) { System.out.println("ByTime" + dateChooserStartByTime.getText() + "\n" + dateChooserEndByTime.getText()); SwingUtilities.invokeLater(new Runnable() { @Override public void run() { downloadByTimeProgressBar.setValue(0); } }); m_hDownLoadByTimeHandle = DownLoadRecordModule.downloadRecordFile(chnComboBoxByTime.getSelectedIndex(), 0, stTimeStart, stTimeEnd, SavePath.getSavePath().getSaveRecordFilePath(), m_DownLoadPosByTime); if(m_hDownLoadByTimeHandle.longValue() != 0) { b_downloadByTime = true; downloadByTimeBtn.setText(Res.string().getStopDownload()); chnComboBoxByTime.setEnabled(false); streamComboBoxByTime.setEnabled(false); dateChooserStartByTime.setEnabled(false); dateChooserEndByTime.setEnabled(false); } else { JOptionPane.showMessageDialog(null, ToolKits.getErrorCodeShow(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE); } } else { DownLoadRecordModule.stopDownLoadRecordFile(m_hDownLoadByTimeHandle); b_downloadByTime = false; downloadByTimeBtn.setText(Res.string().getDownload()); chnComboBoxByTime.setEnabled(true); streamComboBoxByTime.setEnabled(true); dateChooserStartByTime.setEnabled(true); dateChooserEndByTime.setEnabled(true); SwingUtilities.invokeLater(new Runnable() { @Override public void run() { downloadByTimeProgressBar.setValue(0); } }); } } }); } } /* * 按文件下载回调 */ private DownLoadPosCallBackByFile m_DownLoadPosByFile = new DownLoadPosCallBackByFile(); // 录像下载进度 class DownLoadPosCallBackByFile implements NetSDKLib.fTimeDownLoadPosCallBack{ public void invoke(LLong lLoginID, final int dwTotalSize, final int dwDownLoadSize, int index, NetSDKLib.NET_RECORDFILE_INFO.ByValue recordfileinfo, Pointer dwUser) { SwingUtilities.invokeLater(new Runnable() { @Override public void run() { // System.out.println("ByFile " + dwDownLoadSize + " / " + dwTotalSize); downloadByFileProgressBar.setValue(dwDownLoadSize*100 / dwTotalSize); if(dwDownLoadSize == -1) { downloadByFileProgressBar.setValue(100); DownLoadRecordModule.stopDownLoadRecordFile(m_hDownLoadByFileHandle); b_downloadByFile = false; downloadByFileBtn.setText(Res.string().getDownload()); JOptionPane.showMessageDialog(null, Res.string().getDownloadCompleted(), Res.string().getPromptMessage(), JOptionPane.INFORMATION_MESSAGE); } } }); } } /* * 按时间下载回调 */ private DownLoadPosCallBackByTime m_DownLoadPosByTime = new DownLoadPosCallBackByTime(); // 录像下载进度 class DownLoadPosCallBackByTime implements NetSDKLib.fTimeDownLoadPosCallBack{ public void invoke(LLong lLoginID, final int dwTotalSize, final int dwDownLoadSize, int index, NetSDKLib.NET_RECORDFILE_INFO.ByValue recordfileinfo, Pointer dwUser) { SwingUtilities.invokeLater(new Runnable() { @Override public void run() { // System.out.println("ByTime " + dwDownLoadSize + " / " + dwTotalSize); downloadByTimeProgressBar.setValue(dwDownLoadSize*100 / dwTotalSize); if(dwDownLoadSize == -1) { downloadByTimeProgressBar.setValue(100); DownLoadRecordModule.stopDownLoadRecordFile(m_hDownLoadByTimeHandle); b_downloadByTime = false; downloadByTimeBtn.setText(Res.string().getDownload()); chnComboBoxByTime.setEnabled(true); streamComboBoxByTime.setEnabled(true); dateChooserStartByTime.setEnabled(true); dateChooserEndByTime.setEnabled(true); JOptionPane.showMessageDialog(null, Res.string().getDownloadCompleted(), Res.string().getPromptMessage(), JOptionPane.INFORMATION_MESSAGE); } } }); } } private void setButtonEnable(boolean bln) { queryRecordBtn.setEnabled(bln); downloadByFileBtn.setEnabled(bln); downloadByFileProgressBar.setValue(0); downloadByFileProgressBar.setEnabled(bln); downloadByTimeBtn.setEnabled(bln); downloadByTimeProgressBar.setValue(0); downloadByTimeProgressBar.setEnabled(bln); chnComboBoxByFile.setEnabled(bln); streamComboBoxByFile.setEnabled(bln); chnComboBoxByTime.setEnabled(bln); streamComboBoxByTime.setEnabled(bln); dateChooserStartByFile.setEnabled(bln); dateChooserEndByFile.setEnabled(bln); dateChooserStartByTime.setEnabled(bln); dateChooserEndByTime.setEnabled(bln); } //登录组件 private LoginPanel loginPanel; // 下载 private DownLoadRecordPanel downloadRecordPanel; // 按文件下载 private DownLoadByTimePanel downloadByTimePanel; private JPanel downloadByFileSetPanel; private JPanel queryPanel; private JPanel downByFilePanel; private JButton queryRecordBtn; private JButton downloadByFileBtn; private JProgressBar downloadByFileProgressBar; private JButton downloadByTimeBtn; private JProgressBar downloadByTimeProgressBar; private JTable table; private DefaultTableModel defaultmodel; private JLabel chnlabel; private JComboBox chnComboBoxByFile; private JComboBox chnComboBoxByTime; private JLabel streamLabel; private JComboBox streamComboBoxByFile; private JComboBox streamComboBoxByTime; private DateChooserJButton dateChooserStartByFile; private DateChooserJButton dateChooserEndByFile; // 按文件下载 private DownLoadByFilePanel downloadByFilePanel; private JPanel downloadByTimeSetPanel; private JPanel downByTimePanel; private DateChooserJButton dateChooserStartByTime; private DateChooserJButton dateChooserEndByTime; } public class DownLoadRecord { public static void main(String[] args) { SwingUtilities.invokeLater(new Runnable() { public void run() { DownLoadRecordFrame demo = new DownLoadRecordFrame(); demo.setVisible(true); } }); } };