实例介绍
【实例简介】
【Demo内容说明】
-------------------------------------
1. 该Demo主要介绍预览、回放、云台控制、参数配置等基本功能
【注意事项】
------------------------------------
1. 请到海康威视官网下载最新版本设备网络SDK:http://www.hikvision.com/Cn/download_more_401.html
2. 请修改程序代码,其中HCNetSDK.java文件自己指定loadlibrary加载库的路径,【库文件】里的HCNetSDK.dll、HCCore.dll、HCNetSDKCom文件夹、PlayCtrl.dll、SuperRender.dll、AudioRender.dll、D3DX9_43.dll、D3DCompiler_43.dll等文件均拷贝到lib文件夹下。
HCNetSDKCom文件夹(包含里面的功能组件dll库文件)需要和HCNetSDK.dll、HCCore.dll一起加载,放在同一个目录下,且HCNetSDKCom文件夹名不能修改。
3. 如果自行开发软件不能正常实现相应功能,而且程序没有指定加载的dll库路径,请在程序运行的情况下尝试删除HCNetSDK.dll。如果可以删除,说明程序可能调用到系统盘Windows->System32目录下的dll文件,建议删除或者更新该目录下的相关dll文件;如果不能删除,dll文件右键选择属性确认SDK库版本。
4. 如按上述步骤操作后还是不能实现相应功能,请根据NET_DVR_GetLastError返回的错误号判断原因。
【实例截图】
【核心代码】
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
/*
* ClientDemo.java
*
* Created on 2009-9-14, 19:31:34
*/
/**
*
* @author Xubinfeng
*/
package ClientDemo;
import com.sun.jna.Native;
import com.sun.jna.NativeLong;
import com.sun.jna.Pointer;
import com.sun.jna.examples.win32.W32API.HWND;
import com.sun.jna.ptr.ByteByReference;
import com.sun.jna.ptr.IntByReference;
import com.sun.jna.ptr.NativeLongByReference;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.table.DefaultTableModel;
import java.util.Date;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.Toolkit;
import javax.swing.JPopupMenu;
import javax.swing.JWindow;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.DefaultTreeModel;
import javax.swing.tree.TreePath;
/*****************************************************************************
*主类 :ClientDemo
*用途 :用户注册,预览,参数配置菜单
*容器:Jframe
****************************************************************************/
public class ClientDemo extends javax.swing.JFrame
{
/*************************************************
函数: 主类构造函数
函数描述: 初始化成员
*************************************************/
public ClientDemo()
{
JPopupMenu.setDefaultLightWeightPopupEnabled(false);//防止被播放窗口(AWT组件)覆盖
initComponents();
lUserID = new NativeLong(-1);
lPreviewHandle = new NativeLong(-1);
lAlarmHandle = new NativeLong(-1);
lListenHandle = new NativeLong(-1);
g_lVoiceHandle = new NativeLong(-1);
m_lPort = new NativeLongByReference(new NativeLong(-1));
fMSFCallBack = null;
fRealDataCallBack= new FRealDataCallBack();
m_iTreeNodeNum = 0;
}
static HCNetSDK hCNetSDK = HCNetSDK.INSTANCE;
static PlayCtrl playControl = PlayCtrl.INSTANCE;
public static NativeLong g_lVoiceHandle;//全局的语音对讲句柄
HCNetSDK.NET_DVR_DEVICEINFO_V30 m_strDeviceInfo;//设备信息
HCNetSDK.NET_DVR_IPPARACFG_V40 m_strIpparaCfg;//IP参数
HCNetSDK.NET_DVR_CLIENTINFO m_strClientInfo;//用户参数
boolean bRealPlay;//是否在预览.
String m_sDeviceIP;//已登录设备的IP地址
NativeLong lUserID;//用户句柄
NativeLong lPreviewHandle;//预览句柄
NativeLongByReference m_lPort;//回调预览时播放库端口指针
NativeLong lAlarmHandle;//报警布防句柄
NativeLong lListenHandle;//报警监听句柄
FMSGCallBack fMSFCallBack;//报警回调函数实现
FRealDataCallBack fRealDataCallBack;//预览回调函数实现
JFramePTZControl framePTZControl;//云台控制窗口
int m_iTreeNodeNum;//通道树节点数目
DefaultMutableTreeNode m_DeviceRoot;//通道树根节点
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
private void initComponents() {
jSplitPaneHorizontal = new javax.swing.JSplitPane();
jPanelUserInfo = new javax.swing.JPanel();
jButtonRealPlay = new javax.swing.JButton();
jButtonLogin = new javax.swing.JButton();
jLabelUserName = new javax.swing.JLabel();
jLabelIPAddress = new javax.swing.JLabel();
jTextFieldPortNumber = new javax.swing.JTextField();
jTextFieldIPAddress = new javax.swing.JTextField();
jLabelPortNumber = new javax.swing.JLabel();
jLabelPassWord = new javax.swing.JLabel();
jPasswordFieldPassword = new javax.swing.JPasswordField();
jTextFieldUserName = new javax.swing.JTextField();
jButtonExit = new javax.swing.JButton();
jScrollPaneTree = new javax.swing.JScrollPane();
jTreeDevice = new javax.swing.JTree();
jComboBoxCallback = new javax.swing.JComboBox();
jSplitPaneVertical = new javax.swing.JSplitPane();
jPanelRealplayArea = new javax.swing.JPanel();
panelRealplay = new java.awt.Panel();
jScrollPanelAlarmList = new javax.swing.JScrollPane();
jTableAlarm = new javax.swing.JTable();
jMenuBarConfig = new javax.swing.JMenuBar();
jMenuConfig = new javax.swing.JMenu();
jMenuItemBasicConfig = new javax.swing.JMenuItem();
jMenuItemNetwork = new javax.swing.JMenuItem();
jMenuItemChannel = new javax.swing.JMenuItem();
jMenuItemAlarmCfg = new javax.swing.JMenuItem();
jMenuItemSerialCfg = new javax.swing.JMenuItem();
jMenuItemUserConfig = new javax.swing.JMenuItem();
jMenuItemIPAccess = new javax.swing.JMenuItem();
jMenuPlayBack = new javax.swing.JMenu();
jMenuItemPlayBackRemote = new javax.swing.JMenuItem();
jMenuItemPlayTime = new javax.swing.JMenuItem();
jMenuSetAlarm = new javax.swing.JMenu();
jRadioButtonMenuSetAlarm = new javax.swing.JRadioButtonMenuItem();
jRadioButtonMenuListen = new javax.swing.JRadioButtonMenuItem();
jMenuItemRemoveAlarm = new javax.swing.JMenuItem();
jMenuManage = new javax.swing.JMenu();
jMenuItemCheckTime = new javax.swing.JMenuItem();
jMenuItemFormat = new javax.swing.JMenuItem();
jMenuItemUpgrade = new javax.swing.JMenuItem();
jSeparator1 = new javax.swing.JSeparator();
jMenuItemReboot = new javax.swing.JMenuItem();
jMenuItemShutDown = new javax.swing.JMenuItem();
jSeparator2 = new javax.swing.JSeparator();
jMenuItemDefault = new javax.swing.JMenuItem();
jMenuItemDeviceState = new javax.swing.JMenuItem();
jMenuVoice = new javax.swing.JMenu();
jMenuItemVoiceCom = new javax.swing.JMenuItem();
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
setTitle("ClientDemo");
setFont(new java.awt.Font("宋体", 0, 10));
jSplitPaneHorizontal.setBorder(javax.swing.BorderFactory.createEmptyBorder(1, 1, 1, 1));
jSplitPaneHorizontal.setDividerLocation(155);
jSplitPaneHorizontal.setDividerSize(2);
jPanelUserInfo.setBorder(javax.swing.BorderFactory.createEtchedBorder(new java.awt.Color(204, 255, 255), null));
jButtonRealPlay.setText("预览");
jButtonRealPlay.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jButtonRealPlayActionPerformed(evt);
}
});
jButtonLogin.setText("注册");
jButtonLogin.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jButtonLoginActionPerformed(evt);
}
});
jLabelUserName.setText("用户名");
jLabelIPAddress.setText("IP地址");
jTextFieldPortNumber.setText("8000");
jTextFieldIPAddress.setText("172.4.1.170");
jLabelPortNumber.setText("端口");
jLabelPassWord.setText("密码");
jPasswordFieldPassword.setText("12345");
jTextFieldUserName.setText("admin");
jButtonExit.setText("退出");
jButtonExit.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jButtonExitActionPerformed(evt);
}
});
jTreeDevice.setModel(this.initialTreeModel());
jScrollPaneTree.setViewportView(jTreeDevice);
jComboBoxCallback.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "直接预览", "回调预览" }));
javax.swing.GroupLayout jPanelUserInfoLayout = new javax.swing.GroupLayout(jPanelUserInfo);
jPanelUserInfo.setLayout(jPanelUserInfoLayout);
jPanelUserInfoLayout.setHorizontalGroup(
jPanelUserInfoLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanelUserInfoLayout.createSequentialGroup()
.addGap(10, 10, 10)
.addComponent(jLabelIPAddress)
.addGap(14, 14, 14)
.addComponent(jTextFieldIPAddress, javax.swing.GroupLayout.PREFERRED_SIZE, 80, javax.swing.GroupLayout.PREFERRED_SIZE))
.addGroup(jPanelUserInfoLayout.createSequentialGroup()
.addGap(10, 10, 10)
.addComponent(jLabelUserName)
.addGap(14, 14, 14)
.addComponent(jTextFieldUserName, javax.swing.GroupLayout.PREFERRED_SIZE, 80, javax.swing.GroupLayout.PREFERRED_SIZE))
.addGroup(jPanelUserInfoLayout.createSequentialGroup()
.addGap(10, 10, 10)
.addComponent(jLabelPassWord)
.addGap(26, 26, 26)
.addComponent(jPasswordFieldPassword, javax.swing.GroupLayout.PREFERRED_SIZE, 80, javax.swing.GroupLayout.PREFERRED_SIZE))
.addGroup(jPanelUserInfoLayout.createSequentialGroup()
.addContainerGap()
.addComponent(jButtonLogin)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addComponent(jButtonRealPlay))
.addGroup(jPanelUserInfoLayout.createSequentialGroup()
.addGap(10, 10, 10)
.addComponent(jLabelPortNumber)
.addGap(26, 26, 26)
.addComponent(jTextFieldPortNumber, javax.swing.GroupLayout.PREFERRED_SIZE, 80, javax.swing.GroupLayout.PREFERRED_SIZE))
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanelUserInfoLayout.createSequentialGroup()
.addContainerGap(83, Short.MAX_VALUE)
.addComponent(jButtonExit)
.addContainerGap())
.addComponent(jScrollPaneTree, javax.swing.GroupLayout.DEFAULT_SIZE, 150, Short.MAX_VALUE)
.addGroup(jPanelUserInfoLayout.createSequentialGroup()
.addContainerGap()
.addComponent(jComboBoxCallback, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addContainerGap(66, Short.MAX_VALUE))
);
jPanelUserInfoLayout.setVerticalGroup(
jPanelUserInfoLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanelUserInfoLayout.createSequentialGroup()
.addGap(18, 18, 18)
.addGroup(jPanelUserInfoLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jLabelIPAddress)
.addComponent(jTextFieldIPAddress, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addGap(9, 9, 9)
.addGroup(jPanelUserInfoLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jLabelUserName)
.addComponent(jTextFieldUserName, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addGap(9, 9, 9)
.addGroup(jPanelUserInfoLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jLabelPassWord)
.addComponent(jPasswordFieldPassword, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addGap(9, 9, 9)
.addGroup(jPanelUserInfoLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jLabelPortNumber)
.addComponent(jTextFieldPortNumber, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addGroup(jPanelUserInfoLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jButtonLogin)
.addComponent(jButtonRealPlay))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addComponent(jScrollPaneTree, javax.swing.GroupLayout.PREFERRED_SIZE, 404, javax.swing.GroupLayout.PREFERRED_SIZE)
.addGap(18, 18, 18)
.addComponent(jComboBoxCallback, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addGap(10, 10, 10)
.addComponent(jButtonExit)
.addContainerGap())
);
jSplitPaneHorizontal.setLeftComponent(jPanelUserInfo);
jSplitPaneVertical.setDividerLocation(579);
jSplitPaneVertical.setDividerSize(2);
jSplitPaneVertical.setOrientation(javax.swing.JSplitPane.VERTICAL_SPLIT);
jPanelRealplayArea.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(153, 255, 102)));
panelRealplay.addMouseListener(new java.awt.event.MouseAdapter() {
public void mousePressed(java.awt.event.MouseEvent evt) {
panelRealplayMousePressed(evt);
}
});
javax.swing.GroupLayout panelRealplayLayout = new javax.swing.GroupLayout(panelRealplay);
panelRealplay.setLayout(panelRealplayLayout);
panelRealplayLayout.setHorizontalGroup(
panelRealplayLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGap(0, 704, Short.MAX_VALUE)
);
panelRealplayLayout.setVerticalGroup(
panelRealplayLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGap(0, 576, Short.MAX_VALUE)
);
javax.swing.GroupLayout jPanelRealplayAreaLayout = new javax.swing.GroupLayout(jPanelRealplayArea);
jPanelRealplayArea.setLayout(jPanelRealplayAreaLayout);
jPanelRealplayAreaLayout.setHorizontalGroup(
jPanelRealplayAreaLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(panelRealplay, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
);
jPanelRealplayAreaLayout.setVerticalGroup(
jPanelRealplayAreaLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(panelRealplay, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
);
jSplitPaneVertical.setTopComponent(jPanelRealplayArea);
jScrollPanelAlarmList.setBorder(javax.swing.BorderFactory.createEtchedBorder());
jTableAlarm.setModel(this.initialTableModel());
jScrollPanelAlarmList.setViewportView(jTableAlarm);
jSplitPaneVertical.setRightComponent(jScrollPanelAlarmList);
jSplitPaneHorizontal.setRightComponent(jSplitPaneVertical);
jMenuBarConfig.setBorder(new javax.swing.border.SoftBevelBorder(javax.swing.border.BevelBorder.RAISED));
jMenuConfig.setText("配置");
jMenuItemBasicConfig.setText("基本信息");
jMenuItemBasicConfig.addMouseListener(new java.awt.event.MouseAdapter() {
public void mousePressed(java.awt.event.MouseEvent evt) {
jMenuItemBasicConfigMousePressed(evt);
}
});
jMenuConfig.add(jMenuItemBasicConfig);
jMenuItemNetwork.setText("网络参数");
jMenuItemNetwork.addMouseListener(new java.awt.event.MouseAdapter() {
public void mousePressed(java.awt.event.MouseEvent evt) {
jMenuItemNetworkMousePressed(evt);
}
});
jMenuConfig.add(jMenuItemNetwork);
jMenuItemChannel.setText("通道参数");
jMenuItemChannel.addMouseListener(new java.awt.event.MouseAdapter() {
public void mousePressed(java.awt.event.MouseEvent evt) {
jMenuItemChannelMousePressed(evt);
}
});
jMenuConfig.add(jMenuItemChannel);
jMenuItemAlarmCfg.setText("报警参数");
jMenuItemAlarmCfg.addMouseListener(new java.awt.event.MouseAdapter() {
public void mousePressed(java.awt.event.MouseEvent evt) {
jMenuItemAlarmCfgMousePressed(evt);
}
});
jMenuConfig.add(jMenuItemAlarmCfg);
jMenuItemSerialCfg.setText("串口参数");
jMenuItemSerialCfg.addMouseListener(new java.awt.event.MouseAdapter() {
public void mousePressed(java.awt.event.MouseEvent evt) {
jMenuItemSerialCfgMousePressed(evt);
}
});
jMenuConfig.add(jMenuItemSerialCfg);
jMenuItemUserConfig.setText("用户配置");
jMenuItemUserConfig.addMouseListener(new java.awt.event.MouseAdapter() {
public void mousePressed(java.awt.event.MouseEvent evt) {
jMenuItemUserConfigMousePressed(evt);
}
});
jMenuConfig.add(jMenuItemUserConfig);
jMenuItemIPAccess.setText("IP接入配置");
jMenuItemIPAccess.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jMenuItemIPAccessActionPerformed(evt);
}
});
jMenuConfig.add(jMenuItemIPAccess);
jMenuBarConfig.add(jMenuConfig);
jMenuPlayBack.setText("回放");
jMenuItemPlayBackRemote.setText("按文件");
jMenuItemPlayBackRemote.addMouseListener(new java.awt.event.MouseAdapter() {
public void mousePressed(java.awt.event.MouseEvent evt) {
jMenuItemPlayBackRemoteMousePressed(evt);
}
});
jMenuPlayBack.add(jMenuItemPlayBackRemote);
jMenuItemPlayTime.setText("按时间");
jMenuItemPlayTime.addMouseListener(new java.awt.event.MouseAdapter() {
public void mousePressed(java.awt.event.MouseEvent evt) {
jMenuItemPlayTimeMousePressed(evt);
}
});
jMenuPlayBack.add(jMenuItemPlayTime);
jMenuBarConfig.add(jMenuPlayBack);
jMenuSetAlarm.setBorder(null);
jMenuSetAlarm.setText("报警");
jRadioButtonMenuSetAlarm.setText("〇布防");
jRadioButtonMenuSetAlarm.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jRadioButtonMenuSetAlarmActionPerformed(evt);
}
});
jMenuSetAlarm.add(jRadioButtonMenuSetAlarm);
jRadioButtonMenuListen.setText("〇监听");
jRadioButtonMenuListen.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jRadioButtonMenuListenActionPerformed(evt);
}
});
jMenuSetAlarm.add(jRadioButtonMenuListen);
jMenuItemRemoveAlarm.setText("清空报警信息");
jMenuItemRemoveAlarm.addMouseListener(new java.awt.event.MouseAdapter() {
public void mousePressed(java.awt.event.MouseEvent evt) {
jMenuItemRemoveAlarmMousePressed(evt);
}
});
jMenuSetAlarm.add(jMenuItemRemoveAlarm);
jMenuBarConfig.add(jMenuSetAlarm);
jMenuManage.setText("管理");
jMenuItemCheckTime.setText("校时");
jMenuItemCheckTime.addMouseListener(new java.awt.event.MouseAdapter() {
public void mousePressed(java.awt.event.MouseEvent evt) {
jMenuItemCheckTimeMousePressed(evt);
}
});
jMenuManage.add(jMenuItemCheckTime);
jMenuItemFormat.setText("格式化");
jMenuItemFormat.addMouseListener(new java.awt.event.MouseAdapter() {
public void mousePressed(java.awt.event.MouseEvent evt) {
jMenuItemFormatMousePressed(evt);
}
});
jMenuManage.add(jMenuItemFormat);
jMenuItemUpgrade.setText("升级");
jMenuItemUpgrade.addMouseListener(new java.awt.event.MouseAdapter() {
public void mousePressed(java.awt.event.MouseEvent evt) {
jMenuItemUpgradeMousePressed(evt);
}
});
jMenuManage.add(jMenuItemUpgrade);
jMenuManage.add(jSeparator1);
jMenuItemReboot.setText("重启");
jMenuItemReboot.addMouseListener(new java.awt.event.MouseAdapter() {
public void mousePressed(java.awt.event.MouseEvent evt) {
jMenuItemRebootMousePressed(evt);
}
});
jMenuManage.add(jMenuItemReboot);
jMenuItemShutDown.setText("关闭");
jMenuItemShutDown.addMouseListener(new java.awt.event.MouseAdapter() {
public void mousePressed(java.awt.event.MouseEvent evt) {
jMenuItemShutDownMousePressed(evt);
}
});
jMenuManage.add(jMenuItemShutDown);
jMenuManage.add(jSeparator2);
jMenuItemDefault.setText("恢复默认参数");
jMenuItemDefault.addMouseListener(new java.awt.event.MouseAdapter() {
public void mousePressed(java.awt.event.MouseEvent evt) {
jMenuItemDefaultMousePressed(evt);
}
});
jMenuManage.add(jMenuItemDefault);
jMenuItemDeviceState.setText("设备状态");
jMenuItemDeviceState.addMouseListener(new java.awt.event.MouseAdapter() {
public void mousePressed(java.awt.event.MouseEvent evt) {
jMenuItemDeviceStateMousePressed(evt);
}
});
jMenuManage.add(jMenuItemDeviceState);
jMenuBarConfig.add(jMenuManage);
jMenuVoice.setText("语音");
jMenuItemVoiceCom.setText("语音对讲");
jMenuItemVoiceCom.addMouseListener(new java.awt.event.MouseAdapter() {
public void mousePressed(java.awt.event.MouseEvent evt) {
jMenuItemVoiceComMousePressed(evt);
}
});
jMenuVoice.add(jMenuItemVoiceCom);
jMenuBarConfig.add(jMenuVoice);
setJMenuBar(jMenuBarConfig);
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jSplitPaneHorizontal, javax.swing.GroupLayout.DEFAULT_SIZE, 866, Short.MAX_VALUE)
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jSplitPaneHorizontal, javax.swing.GroupLayout.DEFAULT_SIZE, 671, Short.MAX_VALUE)
);
pack();
}// </editor-fold>//GEN-END:initComponents
/*************************************************
函数: "注册" 按钮单击响应函数
函数描述: 注册登录设备
*************************************************/
private void jButtonLoginActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButtonLoginActionPerformed
//注册之前先注销已注册的用户,预览情况下不可注销
if (bRealPlay)
{
JOptionPane.showMessageDialog(this, "注册新用户请先停止当前预览!");
return;
}
if (lUserID.longValue() > -1)
{
//先注销
hCNetSDK.NET_DVR_Logout_V30(lUserID);
lUserID = new NativeLong(-1);
m_iTreeNodeNum = 0;
m_DeviceRoot.removeAllChildren();
}
//注册
m_sDeviceIP = jTextFieldIPAddress.getText();//设备ip地址
m_strDeviceInfo = new HCNetSDK.NET_DVR_DEVICEINFO_V30();
int iPort = Integer.parseInt(jTextFieldPortNumber.getText());
lUserID = hCNetSDK.NET_DVR_Login_V30(m_sDeviceIP,
(short) iPort, jTextFieldUserName.getText(), new String(jPasswordFieldPassword.getPassword()), m_strDeviceInfo);
long userID = lUserID.longValue();
if (userID == -1)
{
m_sDeviceIP = "";//登录未成功,IP置为空
JOptionPane.showMessageDialog(ClientDemo.this, "注册失败");
}
else
{
CreateDeviceTree();
}
}//GEN-LAST:event_jButtonLoginActionPerformed
/*************************************************
函数: initialTableModel
函数描述: 初始化报警信息列表,写入列名称
*************************************************/
public DefaultTableModel initialTableModel()
{
String tabeTile[];
tabeTile = new String[]{"时间", "报警信息", "设备信息" };
DefaultTableModel alarmTableModel = new DefaultTableModel(tabeTile, 0);
return alarmTableModel;
}
/*************************************************
函数: initialTreeModel
函数描述: 初始化设备树
*************************************************/
private DefaultTreeModel initialTreeModel()
{
m_DeviceRoot = new DefaultMutableTreeNode("Device");
DefaultTreeModel myDefaultTreeModel = new DefaultTreeModel(m_DeviceRoot);//使用根节点创建模型
return myDefaultTreeModel;
}
/*************************************************
函数: " 退出" 按钮响应函数
函数描述: 注销并退出
*************************************************/
private void jButtonExitActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButtonExitActionPerformed
//如果在预览,先停止预览, 释放句柄
if (lPreviewHandle.longValue() > -1)
{
hCNetSDK.NET_DVR_StopRealPlay(lPreviewHandle);
if(framePTZControl != null)
{
framePTZControl.dispose();
}
}
//报警撤防
if (lAlarmHandle.intValue() != -1)
{
hCNetSDK.NET_DVR_CloseAlarmChan_V30(lAlarmHandle);
}
//停止监听
if (lListenHandle.intValue() != -1)
{
hCNetSDK.NET_DVR_StopListen_V30(lListenHandle);
}
//如果已经注册,注销
if (lUserID.longValue() > -1)
{
hCNetSDK.NET_DVR_Logout_V30(lUserID);
}
//cleanup SDK
hCNetSDK.NET_DVR_Cleanup();
this.dispose();
}//GEN-LAST:event_jButtonExitActionPerformed
/*************************************************
函数: "清空报警信息" 菜单项响应函数
函数描述: 单击清空信息列表
*************************************************/
private void jMenuItemRemoveAlarmMousePressed(java.awt.event.MouseEvent evt)//GEN-FIRST:event_jMenuItemRemoveAlarmMousePressed
{//GEN-HEADEREND:event_jMenuItemRemoveAlarmMousePressed
//删除所有行
((DefaultTableModel) jTableAlarm.getModel()).getDataVector().removeAllElements();
//把改变显示到列表控件
((DefaultTableModel) jTableAlarm.getModel()).fireTableStructureChanged();
}//GEN-LAST:event_jMenuItemRemoveAlarmMousePressed
/*************************************************
函数: "报警监听" 菜单项响应函数
函数描述: 选中开始监听,取消结束监听
*************************************************/
private void jRadioButtonMenuListenActionPerformed(java.awt.event.ActionEvent evt)//GEN-FIRST:event_jRadioButtonMenuListenActionPerformed
{//GEN-HEADEREND:event_jRadioButtonMenuListenActionPerformed
if (jRadioButtonMenuListen.isSelected() == true)//选择监听
{
if (lListenHandle.intValue() == -1)
//尚未监听,开始监听
{
if (fMSFCallBack == null)
{
fMSFCallBack = new FMSGCallBack();
}
Pointer pUser = null;
if (!hCNetSDK.NET_DVR_SetDVRMessageCallBack_V30(fMSFCallBack, pUser))
{
System.out.println("设置回调函数失败!");
}
//本地IP地址置为null时自动获取本地IP
lListenHandle = hCNetSDK.NET_DVR_StartListen_V30(null, (short)7200, fMSFCallBack, null);
if (lListenHandle.intValue() == -1)
{
JOptionPane.showMessageDialog(this, "开始监听失败");
jRadioButtonMenuListen.setSelected(false);
}
}
}
else
//停止监听
{
if (lListenHandle.intValue() != -1)
{
if (!hCNetSDK.NET_DVR_StopListen_V30(lListenHandle))
{
JOptionPane.showMessageDialog(this, "停止监听失败");
jRadioButtonMenuListen.setSelected(true);
lListenHandle = new NativeLong(-1);
}
else
{
lListenHandle = new NativeLong(-1);
}
}
}
}//GEN-LAST:event_jRadioButtonMenuListenActionPerformed
/*************************************************
函数: "报警布防" 菜单项响应函数
函数描述: 选中布防听,取消撤防
*************************************************/
private void jRadioButtonMenuSetAlarmActionPerformed(java.awt.event.ActionEvent evt)//GEN-FIRST:event_jRadioButtonMenuSetAlarmActionPerformed
{//GEN-HEADEREND:event_jRadioButtonMenuSetAlarmActionPerformed
if (lUserID.intValue() == -1)
{
JOptionPane.showMessageDialog(this, "请先注册");
return;
}
if (jRadioButtonMenuSetAlarm.isSelected() == true)
//已选择布防
{
if (lAlarmHandle.intValue() == -1)//尚未布防,需要布防
{
if (fMSFCallBack == null)
{
fMSFCallBack = new FMSGCallBack();
Pointer pUser = null;
if (!hCNetSDK.NET_DVR_SetDVRMessageCallBack_V30(fMSFCallBack, pUser))
{
System.out.println("设置回调函数失败!");
}
}
lAlarmHandle = hCNetSDK.NET_DVR_SetupAlarmChan_V30(lUserID);
if (lAlarmHandle.intValue() == -1)
{
JOptionPane.showMessageDialog(this, "布防失败");
jRadioButtonMenuSetAlarm.setSelected(false);
}
}
} else
//未选择布防
{
if (lAlarmHandle.intValue() != -1)
{
if (!hCNetSDK.NET_DVR_CloseAlarmChan_V30(lAlarmHandle))
{
JOptionPane.showMessageDialog(this, "撤防失败");
jRadioButtonMenuSetAlarm.setSelected(true);
lAlarmHandle = new NativeLong(-1);
} else
{
lAlarmHandle = new NativeLong(-1);
}
}
}
}//GEN-LAST:event_jRadioButtonMenuSetAlarmActionPerformed
/*************************************************
函数: "预览" 按钮单击响应函数
函数描述: 获取通道号,打开播放窗口,开始此通道的预览
*************************************************/
private void jButtonRealPlayActionPerformed(java.awt.event.ActionEvent evt)//GEN-FIRST:event_jButtonRealPlayActionPerformed
{//GEN-HEADEREND:event_jButtonRealPlayActionPerformed
System.out.println(panelRealplay.getWidth());
System.out.println(panelRealplay.getHeight());
if (lUserID.intValue() == -1)
{
JOptionPane.showMessageDialog(this, "请先注册");
return;
}
//如果预览窗口没打开,不在预览
if (bRealPlay == false)
{
//获取窗口句柄
HWND hwnd = new HWND(Native.getComponentPointer(panelRealplay));
//获取通道号
int iChannelNum = getChannelNumber();//通道号
if(iChannelNum == -1)
{
JOptionPane.showMessageDialog(this, "请选择要预览的通道");
return;
}
m_strClientInfo = new HCNetSDK.NET_DVR_CLIENTINFO();
m_strClientInfo.lChannel = new NativeLong(iChannelNum);
//在此判断是否回调预览,0,不回调 1 回调
if(jComboBoxCallback.getSelectedIndex() == 0)
{
m_strClientInfo.hPlayWnd = hwnd;
lPreviewHandle = hCNetSDK.NET_DVR_RealPlay_V30(lUserID,
m_strClientInfo, null, null, true);
}
else if(jComboBoxCallback.getSelectedIndex() == 1)
{
m_strClientInfo.hPlayWnd = null;
lPreviewHandle = hCNetSDK.NET_DVR_RealPlay_V30(lUserID,
m_strClientInfo, fRealDataCallBack, null, true);
}
long previewSucValue = lPreviewHandle.longValue();
//预览失败时:
if (previewSucValue == -1)
{
JOptionPane.showMessageDialog(this, "预览失败");
return;
}
//预览成功的操作
jButtonRealPlay.setText("停止");
bRealPlay = true;
//显示云台控制窗口
framePTZControl = new JFramePTZControl(lPreviewHandle);
framePTZControl.setLocation(this.getX() this.getWidth(), this.getY());
framePTZControl.setVisible(true);
}
//如果在预览,停止预览,关闭窗口
else
{
hCNetSDK.NET_DVR_StopRealPlay(lPreviewHandle);
jButtonRealPlay.setText("预览");
bRealPlay = false;
if(m_lPort.getValue().intValue() != -1)
{
playControl.PlayM4_Stop(m_lPort.getValue());
m_lPort.setValue(new NativeLong(-1));
}
framePTZControl.dispose();
panelRealplay.repaint();
}
}//GEN-LAST:event_jButtonRealPlayActionPerformed
/*************************************************
函数: "串口" 菜单项响应函数
函数描述: 新建窗体显示串口
*************************************************/
private void jMenuItemSerialCfgMousePressed(java.awt.event.MouseEvent evt)//GEN-FIRST:event_jMenuItemSerialCfgMousePressed
{//GEN-HEADEREND:event_jMenuItemSerialCfgMousePressed
if (lUserID.intValue() == -1)
{
JOptionPane.showMessageDialog(this, "请先注册");
return;
}
//打开JDialog
JDialogSerialCfg dlgSerialCfg = new JDialogSerialCfg(this, false, lUserID, m_strDeviceInfo);
centerWindow(dlgSerialCfg);
dlgSerialCfg.setVisible(true);
}//GEN-LAST:event_jMenuItemSerialCfgMousePressed
/*************************************************
函数: "报警参数" 菜单项响应函数
函数描述: 新建窗体显示报警参数
*************************************************/
private void jMenuItemAlarmCfgMousePressed(java.awt.event.MouseEvent evt)//GEN-FIRST:event_jMenuItemAlarmCfgMousePressed
{//GEN-HEADEREND:event_jMenuItemAlarmCfgMousePressed
if (lUserID.intValue() == -1)
{
JOptionPane.showMessageDialog(this, "请先注册");
return;
}
//打开JDialog
JDialogAlarmCfg dlgAlarmCfg = new JDialogAlarmCfg(this, false, lUserID, m_strDeviceInfo);
dlgAlarmCfg.setLocation(this.getX(),this.getY() );
dlgAlarmCfg.setVisible(true);
}//GEN-LAST:event_jMenuItemAlarmCfgMousePressed
/*************************************************
函数: "通道配置" 菜单项响应函数
函数描述:点击显示通道参数配置
*************************************************/
private void jMenuItemChannelMousePressed(java.awt.event.MouseEvent evt)//GEN-FIRST:event_jMenuItemChannelMousePressed
{//GEN-HEADEREND:event_jMenuItemChannelMousePressed
if (lUserID.intValue() == -1)
{
JOptionPane.showMessageDialog(this, "请先注册");
return;
}
//打开JDialog
JDialogChannelConfig dialogChannelConfig = new JDialogChannelConfig(this, false, lUserID, m_strDeviceInfo);//无模式对话框
dialogChannelConfig.setBounds(this.getX(), this.getY(), 670, 640);
dialogChannelConfig.setVisible(true);
//传参数
int iStartChan = m_strDeviceInfo.byStartChan;
int iChannum = m_strDeviceInfo.byChanNum;
//初始化通道数组合框
for (int i = 0; i < iChannum; i )
{
dialogChannelConfig.jComboBoxChannelNumber.addItem("Camera" (i iStartChan));
}
for (int i = 0; i < HCNetSDK.MAX_IP_CHANNEL; i )
{
if (m_strIpparaCfg.struStreamMode[i].uGetStream.struChanInfo.byEnable == 1)
{
dialogChannelConfig.jComboBoxChannelNumber.addItem("IPCamara" (i iStartChan));
}
}
}//GEN-LAST:event_jMenuItemChannelMousePressed
/*************************************************
函数: "网络参数" 菜单项响应函数
函数描述: 点击显示网络参数配置
*************************************************/
private void jMenuItemNetworkMousePressed(java.awt.event.MouseEvent evt)//GEN-FIRST:event_jMenuItemNetworkMousePressed
{//GEN-HEADEREND:event_jMenuItemNetworkMousePressed
if (lUserID.intValue() == -1)
{
JOptionPane.showMessageDialog(this, "请先注册");
return;
}
//打开Jframe
JFrameNetWorkConfig frameNetwork = new JFrameNetWorkConfig(lUserID);
frameNetwork.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
frameNetwork.setSize(550, 380);
centerWindow(frameNetwork);
frameNetwork.setVisible(true);
}//GEN-LAST:event_jMenuItemNetworkMousePressed
/*************************************************
函数: "基本信息" 菜单项响应函数
函数描述: 新建窗体,显示设备基本信息
*************************************************/
private void jMenuItemBasicConfigMousePressed(java.awt.event.MouseEvent evt)//GEN-FIRST:event_jMenuItemBasicConfigMousePressed
{//GEN-HEADEREND:event_jMenuItemBasicConfigMousePressed
if (lUserID.intValue() == -1)
{
JOptionPane.showMessageDialog(this, "请先注册");
return;
}
//打开JDialog
JDialogBasicConfig dlgBasicConfig = new JDialogBasicConfig(this, false, lUserID);
dlgBasicConfig.setSize(507, 400);
centerWindow(dlgBasicConfig);
dlgBasicConfig.setVisible(true);
}//GEN-LAST:event_jMenuItemBasicConfigMousePressed
/*************************************************
函数: "设备状态" 菜单项响应函数
函数描述: 新建窗体显示设备状态
*************************************************/
private void jMenuItemDeviceStateMousePressed(java.awt.event.MouseEvent evt)//GEN-FIRST:event_jMenuItemDeviceStateMousePressed
{//GEN-HEADEREND:event_jMenuItemDeviceStateMousePressed
if (lUserID.intValue() == -1)
{
JOptionPane.showMessageDialog(this, "请先注册");
return;
}
//打开JDialog
JDialogDeviceState dlgDeviceState = new JDialogDeviceState(this, false, lUserID, m_strDeviceInfo, m_sDeviceIP);
dlgDeviceState.setSize( 680, 715);
centerWindow(dlgDeviceState);
dlgDeviceState.setVisible(true);
}//GEN-LAST:event_jMenuItemDeviceStateMousePressed
/*************************************************
函数: "恢复默认参数" 菜单项响应函数
函数描述: 弹出确认框,是否恢复默认参数
*************************************************/
private void jMenuItemDefaultMousePressed(java.awt.event.MouseEvent evt)//GEN-FIRST:event_jMenuItemDefaultMousePressed
{//GEN-HEADEREND:event_jMenuItemDefaultMousePressed
if (lUserID.intValue() == -1)
{
JOptionPane.showMessageDialog(this, "请先注册");
return;
}
int iResponse = JOptionPane.showConfirmDialog(this, "确定恢复默认参数?", "恢复默认参数", JOptionPane.OK_CANCEL_OPTION);
if (iResponse == 0)
//确认
{
if (!hCNetSDK.NET_DVR_RestoreConfig(lUserID))
{
JOptionPane.showMessageDialog(this, "恢复默认参数失败");
return;
}
}
if (iResponse == 2)
//取消
{
return;
}
}//GEN-LAST:event_jMenuItemDefaultMousePressed
/*************************************************
函数: "关闭" 菜单项响应函数
函数描述: 弹出确认框询问是否关机
*************************************************/
private void jMenuItemShutDownMousePressed(java.awt.event.MouseEvent evt)//GEN-FIRST:event_jMenuItemShutDownMousePressed
{//GEN-HEADEREND:event_jMenuItemShutDownMousePressed
if (lUserID.intValue() == -1)
{
JOptionPane.showMessageDialog(this, "请先注册");
return;
}
int iResponse = JOptionPane.showConfirmDialog(this, "确定关闭设备?", "关机", JOptionPane.OK_CANCEL_OPTION);
//确认
if (iResponse == 0)
{
if (!hCNetSDK.NET_DVR_ShutDownDVR(lUserID))
{
JOptionPane.showMessageDialog(this, "关闭设备失败");
return;
}
}
//取消
if (iResponse == 2)
{
return;
}
}//GEN-LAST:event_jMenuItemShutDownMousePressed
/*************************************************
函数: "重启" 菜单项响应函数
函数描述: 弹出确认框询问是否重启设备
*************************************************/
private void jMenuItemRebootMousePressed(java.awt.event.MouseEvent evt)//GEN-FIRST:event_jMenuItemRebootMousePressed
{//GEN-HEADEREND:event_jMenuItemRebootMousePressed
if (lUserID.intValue() == -1)
{
JOptionPane.showMessageDialog(this, "请先注册");
return;
}
int iResponse = JOptionPane.showConfirmDialog(this, "确定重启设备?", "重启", JOptionPane.OK_CANCEL_OPTION);
//确认
if (iResponse == 0)
{
if (!hCNetSDK.NET_DVR_RebootDVR(lUserID))
{
JOptionPane.showMessageDialog(this, "设备重启失败");
return;
}
}
//取消
if (iResponse == 2)
{
return;
}
}//GEN-LAST:event_jMenuItemRebootMousePressed
/*************************************************
函数: "升级" 菜单项响应函数
函数描述: 新建窗体,显示升级选项
*************************************************/
private void jMenuItemUpgradeMousePressed(java.awt.event.MouseEvent evt)//GEN-FIRST:event_jMenuItemUpgradeMousePressed
{//GEN-HEADEREND:event_jMenuItemUpgradeMousePressed
if (lUserID.intValue() == -1)
{
JOptionPane.showMessageDialog(this, "请先注册");
return;
}
//打开JDialog
JDialogUpGrade dlgUpgrade = new JDialogUpGrade(this, false, lUserID);
dlgUpgrade.setSize(440, 265);
centerWindow(dlgUpgrade);
dlgUpgrade.setVisible(true);
}//GEN-LAST:event_jMenuItemUpgradeMousePressed
/*************************************************
函数: "格式化" 菜单项响应函数
函数描述: 新建窗体,显示格式化选项
*************************************************/
private void jMenuItemFormatMousePressed(java.awt.event.MouseEvent evt)//GEN-FIRST:event_jMenuItemFormatMousePressed
{//GEN-HEADEREND:event_jMenuItemFormatMousePressed
if (lUserID.intValue() == -1)
{
JOptionPane.showMessageDialog(this, "请先注册");
return;
}
//打开JDialog
JDialogFormatDisk dlgFormatDisk = new JDialogFormatDisk(this, false, lUserID);
centerWindow(dlgFormatDisk);
dlgFormatDisk.setVisible(true);
}//GEN-LAST:event_jMenuItemFormatMousePressed
/*************************************************
函数: "校时" 菜单项响应函数
函数描述: 新建窗体,显示校时选项
*************************************************/
private void jMenuItemCheckTimeMousePressed(java.awt.event.MouseEvent evt)//GEN-FIRST:event_jMenuItemCheckTimeMousePressed
{//GEN-HEADEREND:event_jMenuItemCheckTimeMousePressed
if (lUserID.intValue() == -1)
{
JOptionPane.showMessageDialog(this, "请先注册");
return;
}
//打开JDialog
JDialogCheckTime dlgCheckTime = new JDialogCheckTime(this, false, lUserID);
centerWindow(dlgCheckTime);
dlgCheckTime.setVisible(true);
}//GEN-LAST:event_jMenuItemCheckTimeMousePressed
/*************************************************
函数: "时间回放" 菜单项响应函数
函数描述: 新建窗体时间回放
*************************************************/
private void jMenuItemPlayTimeMousePressed(java.awt.event.MouseEvent evt)//GEN-FIRST:event_jMenuItemPlayTimeMousePressed
{//GEN-HEADEREND:event_jMenuItemPlayTimeMousePressed
if (lUserID.intValue() == -1)
{
JOptionPane.showMessageDialog(this, "请先注册");
return;
}
//打开JDialog
JDialogPlayBackByTime dlgPlayTime = new JDialogPlayBackByTime(this, false, lUserID, m_sDeviceIP);
centerWindow(dlgPlayTime);
dlgPlayTime.setVisible(true);
}//GEN-LAST:event_jMenuItemPlayTimeMousePressed
/*************************************************
函数: "回放" 按文件 菜单项响应函数
函数描述: 点击打开回放界面
*************************************************/
private void jMenuItemPlayBackRemoteMousePressed(java.awt.event.MouseEvent evt)//GEN-FIRST:event_jMenuItemPlayBackRemoteMousePressed
{//GEN-HEADEREND:event_jMenuItemPlayBackRemoteMousePressed
if (lUserID.intValue() == -1)
{
JOptionPane.showMessageDialog(this, "请先注册");
return;
}
//打开JDialog
//无模式对话框
JDialogPlayBack dialogPlayBack = new JDialogPlayBack(this, false, lUserID);
dialogPlayBack.setBounds(this.getX(), this.getY() , 730, 650);
centerWindow(dialogPlayBack);
dialogPlayBack.setVisible(true);
}//GEN-LAST:event_jMenuItemPlayBackRemoteMousePressed
/*************************************************
函数: "用户配置" 按文件 菜单项响应函数
函数描述: 点击打开对话框,开始用户配置
*************************************************/
private void jMenuItemUserConfigMousePressed(java.awt.event.MouseEvent evt)//GEN-FIRST:event_jMenuItemUserConfigMousePressed
{//GEN-HEADEREND:event_jMenuItemUserConfigMousePressed
if (lUserID.intValue() == -1)
{
JOptionPane.showMessageDialog(this, "请先注册");
return;
}
JDialogUserConfig dlgUserConfig = new JDialogUserConfig(this, false, lUserID, m_strDeviceInfo, m_strIpparaCfg);
centerWindow(dlgUserConfig);
dlgUserConfig.setVisible(true);
}//GEN-LAST:event_jMenuItemUserConfigMousePressed
/*************************************************
函数: "语音对讲" 按文件 菜单项响应函数
函数描述: 点击打开对话框,开始语音对讲相关操作
*************************************************/
private void jMenuItemVoiceComMousePressed(java.awt.event.MouseEvent evt)//GEN-FIRST:event_jMenuItemVoiceComMousePressed
{//GEN-HEADEREND:event_jMenuItemVoiceComMousePressed
if (lUserID.intValue() == -1)
{
JOptionPane.showMessageDialog(this, "请先注册");
return;
}
JDialogVoiceTalk dlgVoiceTalk = new JDialogVoiceTalk(this, false, lUserID, m_strDeviceInfo);
centerWindow(dlgVoiceTalk);
dlgVoiceTalk.setVisible(true);
}//GEN-LAST:event_jMenuItemVoiceComMousePressed
/*************************************************
函数: "Ip接入" 按文件 菜单项响应函数
函数描述: 点击打开对话框,IP接入配置
*************************************************/
private void jMenuItemIPAccessActionPerformed(java.awt.event.ActionEvent evt)//GEN-FIRST:event_jMenuItemIPAccessActionPerformed
{//GEN-HEADEREND:event_jMenuItemIPAccessActionPerformed
if (lUserID.intValue() == -1)
{
JOptionPane.showMessageDialog(this, "请先注册");
return;
}
JDialogIPAccessCfg dlgIPAccess = new JDialogIPAccessCfg(this, false, lUserID, m_strDeviceInfo);
centerWindow(dlgIPAccess);
dlgIPAccess.setVisible(true);
}//GEN-LAST:event_jMenuItemIPAccessActionPerformed
/*************************************************
函数: "播放窗口" 双击响应函数
函数描述: 双击全屏预览当前预览通道
*************************************************/
private void panelRealplayMousePressed(java.awt.event.MouseEvent evt)//GEN-FIRST:event_panelRealplayMousePressed
{//GEN-HEADEREND:event_panelRealplayMousePressed
if(!bRealPlay)
{
return;
}
//鼠标单击事件为双击
if(evt.getClickCount() == 2)
{
//新建JWindow 全屏预览
final JWindow wnd = new JWindow();
//获取屏幕尺寸
Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
wnd.setSize(screenSize);
wnd.setVisible(true);
final HWND hwnd = new HWND(Native.getComponentPointer(wnd));
m_strClientInfo.hPlayWnd = hwnd;
final NativeLong lRealHandle = hCNetSDK.NET_DVR_RealPlay_V30(lUserID,
m_strClientInfo, null, null, true);
//JWindow增加双击响应函数,双击时停止预览,退出全屏
wnd.addMouseListener(new java.awt.event.MouseAdapter() {
public void mousePressed(java.awt.event.MouseEvent evt) {
if(evt.getClickCount() == 2)
{
//停止预览
hCNetSDK.NET_DVR_StopRealPlay(lRealHandle);
wnd.dispose();
}
}
});
}
}//GEN-LAST:event_panelRealplayMousePressed
/*************************************************
函数: centerWindow
函数描述:窗口置中
*************************************************/
public static void centerWindow(Container window) {
Dimension dim = Toolkit.getDefaultToolkit().getScreenSize();
int w = window.getSize().width;
int h = window.getSize().height;
int x = (dim.width - w) / 2;
int y = (dim.height - h) / 2;
window.setLocation(x, y);
}
/*************************************************
函数: CreateDeviceTree
函数描述:建立设备通道数
*************************************************/
private void CreateDeviceTree()
{
IntByReference ibrBytesReturned = new IntByReference(0);//获取IP接入配置参数
boolean bRet = false;
m_strIpparaCfg = new HCNetSDK.NET_DVR_IPPARACFG_V40();
m_strIpparaCfg.write();
Pointer lpIpParaConfig = m_strIpparaCfg.getPointer();
bRet = hCNetSDK.NET_DVR_GetDVRConfig(lUserID, HCNetSDK.NET_DVR_GET_IPPARACFG_V40, new NativeLong(0), lpIpParaConfig, m_strIpparaCfg.size(), ibrBytesReturned);
m_strIpparaCfg.read();
DefaultTreeModel TreeModel = ((DefaultTreeModel) jTreeDevice.getModel());//获取树模型
if (!bRet)
{
//设备不支持,则表示没有IP通道
for (int iChannum = 0; iChannum < m_strDeviceInfo.byChanNum; iChannum )
{
DefaultMutableTreeNode newNode = new DefaultMutableTreeNode("Camera" (iChannum m_strDeviceInfo.byStartChan));
TreeModel.insertNodeInto(newNode, m_DeviceRoot,iChannum);
}
}
else
{
//设备支持IP通道
for (int iChannum = 0; iChannum < m_strDeviceInfo.byChanNum; iChannum )
{
if(m_strIpparaCfg.byAnalogChanEnable[iChannum] == 1)
{
DefaultMutableTreeNode newNode = new DefaultMutableTreeNode("Camera" (iChannum m_strDeviceInfo.byStartChan));
TreeModel.insertNodeInto(newNode, m_DeviceRoot,m_iTreeNodeNum);
m_iTreeNodeNum ;
}
}
for(int iChannum =0; iChannum < HCNetSDK.MAX_IP_CHANNEL; iChannum )
{
if(m_strIpparaCfg.struStreamMode[iChannum].byGetStreamType ==0)
{
m_strIpparaCfg.struStreamMode[iChannum].uGetStream.setType(HCNetSDK.NET_DVR_IPCHANINFO.class);
m_strIpparaCfg.struStreamMode[iChannum].uGetStream.read();
if (m_strIpparaCfg.struStreamMode[iChannum].uGetStream.struChanInfo.byEnable == 1)
{
DefaultMutableTreeNode newNode = new DefaultMutableTreeNode("IPCamera" (iChannum m_strDeviceInfo.byStartChan));
TreeModel.insertNodeInto(newNode, m_DeviceRoot, m_iTreeNodeNum);
}
}
if(m_strIpparaCfg.struStreamMode[iChannum].byGetStreamType ==6)
{
m_strIpparaCfg.struStreamMode[iChannum].uGetStream.setType(HCNetSDK.NET_DVR_IPCHANINFO_V40.class);
m_strIpparaCfg.struStreamMode[iChannum].uGetStream.read();
if (m_strIpparaCfg.struStreamMode[iChannum].uGetStream.struIPChan.byEnable == 1)
{
DefaultMutableTreeNode newNode = new DefaultMutableTreeNode("IPCamera" (iChannum m_strDeviceInfo.byStartChan));
TreeModel.insertNodeInto(newNode, m_DeviceRoot, m_iTreeNodeNum);
}
}
}
}
TreeModel.reload();//将添加的节点显示到界面
jTreeDevice.setSelectionInterval(1, 1);//选中第一个节点
}
/*************************************************
函数: getChannelNumber
函数描述:从设备树获取通道号
*************************************************/
int getChannelNumber()
{
int iChannelNum = -1;
TreePath tp = jTreeDevice.getSelectionPath();//获取选中节点的路径
if(tp != null)//判断路径是否有效,即判断是否有通道被选中
{
//获取选中的通道名,对通道名进行分析:
String sChannelName = ((DefaultMutableTreeNode)tp.getLastPathComponent()).toString();
if(sChannelName.charAt(0) == 'C')//Camara开头表示模拟通道
{
//子字符串中获取通道号
iChannelNum = Integer.parseInt(sChannelName.substring(6));
}
else
{
if(sChannelName.charAt(0) == 'I')//IPCamara开头表示IP通道
{
//子字符创中获取通道号,IP通道号要加32
iChannelNum = Integer.parseInt(sChannelName.substring(8)) 32;
}
else
{
return -1;
}
}
}
else
{
return -1;
}
return iChannelNum;
}
/*************************************************
函数: 主函数
函数描述:新建ClientDemo窗体并调用接口初始化SDK
*************************************************/
public static void main(String args[])
{
try
{
javax.swing.UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");
} catch (Exception e)
{
e.printStackTrace();
}
java.awt.EventQueue.invokeLater(new Runnable()
{
public void run()
{
boolean initSuc = hCNetSDK.NET_DVR_Init();
if (initSuc != true)
{
JOptionPane.showMessageDialog(null, "初始化失败");
}
ClientDemo Demo = new ClientDemo();
centerWindow(Demo);
Demo.setVisible(true);
}
});
}
// Variables declaration - do not modify//GEN-BEGIN:variables
private javax.swing.JButton jButtonExit;
private javax.swing.JButton jButtonLogin;
private javax.swing.JButton jButtonRealPlay;
private javax.swing.JComboBox jComboBoxCallback;
private javax.swing.JLabel jLabelIPAddress;
private javax.swing.JLabel jLabelPassWord;
private javax.swing.JLabel jLabelPortNumber;
private javax.swing.JLabel jLabelUserName;
private javax.swing.JMenuBar jMenuBarConfig;
private javax.swing.JMenu jMenuConfig;
private javax.swing.JMenuItem jMenuItemAlarmCfg;
private javax.swing.JMenuItem jMenuItemBasicConfig;
private javax.swing.JMenuItem jMenuItemChannel;
private javax.swing.JMenuItem jMenuItemCheckTime;
private javax.swing.JMenuItem jMenuItemDefault;
private javax.swing.JMenuItem jMenuItemDeviceState;
private javax.swing.JMenuItem jMenuItemFormat;
private javax.swing.JMenuItem jMenuItemIPAccess;
private javax.swing.JMenuItem jMenuItemNetwork;
private javax.swing.JMenuItem jMenuItemPlayBackRemote;
private javax.swing.JMenuItem jMenuItemPlayTime;
private javax.swing.JMenuItem jMenuItemReboot;
private javax.swing.JMenuItem jMenuItemRemoveAlarm;
private javax.swing.JMenuItem jMenuItemSerialCfg;
private javax.swing.JMenuItem jMenuItemShutDown;
private javax.swing.JMenuItem jMenuItemUpgrade;
private javax.swing.JMenuItem jMenuItemUserConfig;
private javax.swing.JMenuItem jMenuItemVoiceCom;
private javax.swing.JMenu jMenuManage;
private javax.swing.JMenu jMenuPlayBack;
private javax.swing.JMenu jMenuSetAlarm;
private javax.swing.JMenu jMenuVoice;
private javax.swing.JPanel jPanelRealplayArea;
private javax.swing.JPanel jPanelUserInfo;
private javax.swing.JPasswordField jPasswordFieldPassword;
private javax.swing.JRadioButtonMenuItem jRadioButtonMenuListen;
private javax.swing.JRadioButtonMenuItem jRadioButtonMenuSetAlarm;
private javax.swing.JScrollPane jScrollPaneTree;
private javax.swing.JScrollPane jScrollPanelAlarmList;
private javax.swing.JSeparator jSeparator1;
private javax.swing.JSeparator jSeparator2;
private javax.swing.JSplitPane jSplitPaneHorizontal;
private javax.swing.JSplitPane jSplitPaneVertical;
private javax.swing.JTable jTableAlarm;
private javax.swing.JTextField jTextFieldIPAddress;
private javax.swing.JTextField jTextFieldPortNumber;
private javax.swing.JTextField jTextFieldUserName;
private javax.swing.JTree jTreeDevice;
private java.awt.Panel panelRealplay;
// End of variables declaration//GEN-END:variables
/******************************************************************************
*内部类: FMSGCallBack
*报警信息回调函数
******************************************************************************/
public class FMSGCallBack implements HCNetSDK.FMSGCallBack
{
//报警信息回调函数
public void invoke(NativeLong lCommand, HCNetSDK.NET_DVR_ALARMER pAlarmer, HCNetSDK.RECV_ALARM pAlarmInfo, int dwBufLen, Pointer pUser)
{
String sAlarmType = new String();
DefaultTableModel alarmTableModel = ((DefaultTableModel) jTableAlarm.getModel());//获取表格模型
String[] newRow = new String[3];
//报警时间
Date today = new Date();
DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
String[] sIP = new String[2];
//lCommand是传的报警类型
switch (lCommand.intValue())
{
//9000报警
case HCNetSDK.COMM_ALARM_V30:
HCNetSDK.NET_DVR_ALARMINFO_V30 strAlarmInfoV30 = new HCNetSDK.NET_DVR_ALARMINFO_V30();
strAlarmInfoV30.write();
Pointer pInfoV30 = strAlarmInfoV30.getPointer();
pInfoV30.write(0, pAlarmInfo.RecvBuffer, 0, strAlarmInfoV30.size());
strAlarmInfoV30.read();
switch (strAlarmInfoV30.dwAlarmType)
{
case 0:
sAlarmType = new String("信号量报警");
break;
case 1:
sAlarmType = new String("硬盘满");
break;
case 2:
sAlarmType = new String("信号丢失");
break;
case 3:
sAlarmType = new String("移动侦测");
break;
case 4:
sAlarmType = new String("硬盘未格式化");
break;
case 5:
sAlarmType = new String("读写硬盘出错");
break;
case 6:
sAlarmType = new String("遮挡报警");
break;
case 7:
sAlarmType = new String("制式不匹配");
break;
case 8:
sAlarmType = new String("非法访问");
break;
}
newRow[0] = dateFormat.format(today);
//报警类型
newRow[1] = sAlarmType;
//报警设备IP地址
sIP = new String(pAlarmer.sDeviceIP).split("\0", 2);
newRow[2] = sIP[0];
alarmTableModel.insertRow(0, newRow);
break;
//8000报警
case HCNetSDK.COMM_ALARM:
HCNetSDK.NET_DVR_ALARMINFO strAlarmInfo = new HCNetSDK.NET_DVR_ALARMINFO();
strAlarmInfo.write();
Pointer pInfo = strAlarmInfo.getPointer();
pInfo.write(0, pAlarmInfo.RecvBuffer, 0, strAlarmInfo.size());
strAlarmInfo.read();
switch (strAlarmInfo.dwAlarmType)
{
case 0:
sAlarmType = new String("信号量报警");
break;
case 1:
sAlarmType = new String("硬盘满");
break;
case 2:
sAlarmType = new String("信号丢失");
break;
case 3:
sAlarmType = new String("移动侦测");
break;
case 4:
sAlarmType = new String("硬盘未格式化");
break;
case 5:
sAlarmType = new String("读写硬盘出错");
break;
case 6:
sAlarmType = new String("遮挡报警");
break;
case 7:
sAlarmType = new String("制式不匹配");
break;
case 8:
sAlarmType = new String("非法访问");
break;
}
newRow[0] = dateFormat.format(today);
//报警类型
newRow[1] = sAlarmType;
//报警设备IP地址
sIP = new String(pAlarmer.sDeviceIP).split("\0", 2);
newRow[2] = sIP[0];
alarmTableModel.insertRow(0, newRow);
break;
//ATM DVR transaction information
case HCNetSDK.COMM_TRADEINFO:
//处理交易信息报警
break;
//IPC接入配置改变报警
case HCNetSDK.COMM_IPCCFG:
// 处理IPC报警
break;
default:
System.out.println("未知报警类型");
break;
}
}
}
/******************************************************************************
*内部类: FRealDataCallBack
* 实现预览回调数据
******************************************************************************/
class FRealDataCallBack implements HCNetSDK.FRealDataCallBack_V30
{
//预览回调
public void invoke(NativeLong lRealHandle, int dwDataType, ByteByReference pBuffer, int dwBufSize, Pointer pUser)
{
HWND hwnd = new HWND(Native.getComponentPointer(panelRealplay));
switch (dwDataType)
{
case HCNetSDK.NET_DVR_SYSHEAD: //系统头
if (!playControl.PlayM4_GetPort(m_lPort)) //获取播放库未使用的通道号
{
break;
}
if (dwBufSize > 0)
{
if (!playControl.PlayM4_SetStreamOpenMode(m_lPort.getValue(), PlayCtrl.STREAME_REALTIME)) //设置实时流播放模式
{
break;
}
if (!playControl.PlayM4_OpenStream(m_lPort.getValue(), pBuffer, dwBufSize, 1024 * 1024)) //打开流接口
{
break;
}
if (!playControl.PlayM4_Play(m_lPort.getValue(), hwnd)) //播放开始
{
break;
}
}
case HCNetSDK.NET_DVR_STREAMDATA: //码流数据
if ((dwBufSize > 0) && (m_lPort.getValue().intValue() != -1))
{
if (!playControl.PlayM4_InputData(m_lPort.getValue(), pBuffer, dwBufSize)) //输入流数据
{
break;
}
}
}
}
}
}
小贴士
感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。
- 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
- 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
- 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
- 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。
关于好例子网
本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明


网友评论
我要评论