package com.crc.swing;
import java.awt.Container;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Hashtable;
import javax.jms.JMSException;
import javax.jms.Queue;
import javax.jms.QueueConnection;
import javax.jms.QueueConnectionFactory;
import javax.jms.QueueSender;
import javax.jms.QueueSession;
import javax.jms.TextMessage;
import javax.naming.InitialContext;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import com.crc.jmsSend.JmeSend;
public class JmsClient {
private static int PANEL_WIDTH = 450;
private static int JFrame_WIDTH = 900;
private static int JFrame_HIGHT = 500;
private static JTextArea jmsMessageTextArea;
private static JTextField jmsInitServerurlText;
private static JTextField jmsInitJndiText;
private static JTextField jmsFactoryText;
private static JTextField jmsQueueText;
private static JButton resetButton;
private static JButton submitButton;
/**
* { 创建并显示GUI。出于线程安全的考虑, 这个方法在事件调用线程中调用。
*/
public static void main(String[] args) {
// 创建 JFrame 实例
JFrame jFrame = new JFrame("JMS客户端测试界面");
// Setting the width and height of frame
jFrame.setSize(JFrame_WIDTH, JFrame_HIGHT);
jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Container contentPane = jFrame.getContentPane();
// contentPane.setLayout(new BorderLayout());
// frame.setLayout(new BoxLayout(frame, 0));
/*
* 创建面板,这个类似于 HTML 的 div 标签 我们可以创建多个面板并在 JFrame 中指定位置 面板中我们可以添加文本字段,按钮及其他组件。
*/
// 消息面板
JPanel panelMessage = new JPanel();
// 属性面板
JPanel panelAttribute = new JPanel();
panelMessage.setSize(PANEL_WIDTH, JFrame_HIGHT);
panelAttribute.setSize(PANEL_WIDTH, JFrame_HIGHT);
// 添加面板
contentPane.add(panelAttribute);
contentPane.add(panelMessage);
/*
* 调用用户定义的方法并添加组件到面板
*/
placeAttribute(panelAttribute);
placeMessage(panelMessage);
// 设置界面可见
jFrame.setVisible(true);
}
/**
*
* placeAttribute:属性面板内容设置 <br/>
*
* @param panel
* @since JDK 1.7
*/
private static void placeAttribute(JPanel panel) {
/*
* 布局部分我们这边不多做介绍 这边设置布局为 null
*/
// panel.setBackground(Color);
panel.setLayout(null);
// 创建 JMS_INIT_SERVERURL
JLabel jmsInitServerurlLabel = new JLabel("JMS_INIT_SERVERURL:");
jmsInitServerurlLabel.setBounds(10, 20, 150, 25);
panel.add(jmsInitServerurlLabel);
jmsInitServerurlText = new JTextField(250);
jmsInitServerurlText.setBounds(150, 20, 250, 25);
panel.add(jmsInitServerurlText);
// 创建 JMS_INIT_JNDI
JLabel jmsInitJndiLabel = new JLabel("JMS_INIT_JNDI:");
jmsInitJndiLabel.setBounds(10, 55, 150, 25);
panel.add(jmsInitJndiLabel);
jmsInitJndiText = new JTextField(250);
jmsInitJndiText.setBounds(150, 55, 250, 25);
panel.add(jmsInitJndiText);
// 创建 JMS_FACTORY
JLabel jmsFactoryLabel = new JLabel("JMS_FACTORY:");
jmsFactoryLabel.setBounds(10, 90, 150, 25);
panel.add(jmsFactoryLabel);
jmsFactoryText = new JTextField(250);
jmsFactoryText.setBounds(150, 90, 250, 25);
panel.add(jmsFactoryText);
// 创建 BANK_JMS_QUEUE
JLabel jmsQueueLabel = new JLabel("JMS_QUEUE:");
jmsQueueLabel.setBounds(10, 125, 150, 25);
panel.add(jmsQueueLabel);
jmsQueueText = new JTextField(50);
jmsQueueText.setBounds(150, 125, 250, 25);
panel.add(jmsQueueText);
// 全部重置
resetButton = new JButton("全部重置");
resetButton.setBounds(10, 160, 80, 25);
panel.add(resetButton);
// 连接并发送
submitButton = new JButton("连接并发送");
submitButton.setBounds(150, 160, 80, 25);
panel.add(submitButton);
// 连接并发送事件
submitButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// 进行逻辑处理即可
System.out.println("触发连接并发送");
connAndSend();
}
});
// 全部重置
resetButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// 进行逻辑处理即可
System.out.println("resetButton");
reset();
}
});
}
/**
*
* connAndSend:连接并发送 <br/>
*
* @since JDK 1.7
*/
private static void connAndSend() {
System.out.println("您发送的报文是:" + jmsMessageTextArea.getText());
QueueSession session = null;
QueueSender queueSender = null;
QueueConnection conn = null;
TextMessage textMessage = null;
try {
Hashtable env = new Hashtable();
env.put(InitialContext.INITIAL_CONTEXT_FACTORY, jmsInitJndiText.getText());
env.put(InitialContext.PROVIDER_URL, jmsInitServerurlText.getText());
InitialContext iniCtx = new InitialContext(env);
// 创建连接工厂
Object factory = iniCtx.lookup(jmsFactoryText.getText());
QueueConnectionFactory qcf = (QueueConnectionFactory) factory;
// 创建连接
conn = qcf.createQueueConnection();
if (null != conn) {
conn.start();
} else {
System.out.println("QueueConnection实例化失败");
return;
}
// 获取队列
Queue queue = (Queue) iniCtx.lookup(jmsQueueText.getText());
// 创建会话
session = conn.createQueueSession(false, QueueSession.AUTO_ACKNOWLEDGE);
if (null != session) {
textMessage = session.createTextMessage();
textMessage.clearBody();
textMessage.setText(jmsMessageTextArea.getText());
} else {
System.out.println("QueueSession实例化失败");
return;
}
// 发送消息
queueSender = session.createSender(queue);
if (null != queueSender) {
queueSender.send(textMessage);
} else {
System.out.println("QueueSender实例化失败");
return;
}
} catch (Exception e) {
System.out.println("往JMS队列插入消息失败:" + jmsMessageTextArea.getText());
e.printStackTrace();
} finally {
try {
if (queueSender != null) {
queueSender.close();
}
if (session != null) {
session.close();
}
if (conn != null) {
conn.close();
}
} catch (JMSException e) {
e.printStackTrace();
}
}
}
/**
*
* reset:全部重置 <br/>
*
* @since JDK 1.7
*/
private static void reset() {
System.out.println("1111");
}
/**
*
* placeMessage:消息面板内容设置 <br/>
*
* @param panel
* @since JDK 1.7
*/
private static void placeMessage(JPanel panel) {
panel.setLayout(null);
// 创建 JMS_MESSAGE
JLabel jmsMessageLabel = new JLabel("JMS_MESSAGE:");
jmsMessageLabel.setBounds(10 + PANEL_WIDTH, 20, 400, 25);
panel.add(jmsMessageLabel);
jmsMessageTextArea = new JTextArea(250, 300);
jmsMessageTextArea.setBounds(10 + PANEL_WIDTH, 55, 400, 300);
panel.add(jmsMessageTextArea);
}
}
import java.awt.Container;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Hashtable;
import javax.jms.JMSException;
import javax.jms.Queue;
import javax.jms.QueueConnection;
import javax.jms.QueueConnectionFactory;
import javax.jms.QueueSender;
import javax.jms.QueueSession;
import javax.jms.TextMessage;
import javax.naming.InitialContext;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import com.crc.jmsSend.JmeSend;
public class JmsClient {
private static int PANEL_WIDTH = 450;
private static int JFrame_WIDTH = 900;
private static int JFrame_HIGHT = 500;
private static JTextArea jmsMessageTextArea;
private static JTextField jmsInitServerurlText;
private static JTextField jmsInitJndiText;
private static JTextField jmsFactoryText;
private static JTextField jmsQueueText;
private static JButton resetButton;
private static JButton submitButton;
/**
* { 创建并显示GUI。出于线程安全的考虑, 这个方法在事件调用线程中调用。
*/
public static void main(String[] args) {
// 创建 JFrame 实例
JFrame jFrame = new JFrame("JMS客户端测试界面");
// Setting the width and height of frame
jFrame.setSize(JFrame_WIDTH, JFrame_HIGHT);
jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Container contentPane = jFrame.getContentPane();
// contentPane.setLayout(new BorderLayout());
// frame.setLayout(new BoxLayout(frame, 0));
/*
* 创建面板,这个类似于 HTML 的 div 标签 我们可以创建多个面板并在 JFrame 中指定位置 面板中我们可以添加文本字段,按钮及其他组件。
*/
// 消息面板
JPanel panelMessage = new JPanel();
// 属性面板
JPanel panelAttribute = new JPanel();
panelMessage.setSize(PANEL_WIDTH, JFrame_HIGHT);
panelAttribute.setSize(PANEL_WIDTH, JFrame_HIGHT);
// 添加面板
contentPane.add(panelAttribute);
contentPane.add(panelMessage);
/*
* 调用用户定义的方法并添加组件到面板
*/
placeAttribute(panelAttribute);
placeMessage(panelMessage);
// 设置界面可见
jFrame.setVisible(true);
}
/**
*
* placeAttribute:属性面板内容设置 <br/>
*
* @param panel
* @since JDK 1.7
*/
private static void placeAttribute(JPanel panel) {
/*
* 布局部分我们这边不多做介绍 这边设置布局为 null
*/
// panel.setBackground(Color);
panel.setLayout(null);
// 创建 JMS_INIT_SERVERURL
JLabel jmsInitServerurlLabel = new JLabel("JMS_INIT_SERVERURL:");
jmsInitServerurlLabel.setBounds(10, 20, 150, 25);
panel.add(jmsInitServerurlLabel);
jmsInitServerurlText = new JTextField(250);
jmsInitServerurlText.setBounds(150, 20, 250, 25);
panel.add(jmsInitServerurlText);
// 创建 JMS_INIT_JNDI
JLabel jmsInitJndiLabel = new JLabel("JMS_INIT_JNDI:");
jmsInitJndiLabel.setBounds(10, 55, 150, 25);
panel.add(jmsInitJndiLabel);
jmsInitJndiText = new JTextField(250);
jmsInitJndiText.setBounds(150, 55, 250, 25);
panel.add(jmsInitJndiText);
// 创建 JMS_FACTORY
JLabel jmsFactoryLabel = new JLabel("JMS_FACTORY:");
jmsFactoryLabel.setBounds(10, 90, 150, 25);
panel.add(jmsFactoryLabel);
jmsFactoryText = new JTextField(250);
jmsFactoryText.setBounds(150, 90, 250, 25);
panel.add(jmsFactoryText);
// 创建 BANK_JMS_QUEUE
JLabel jmsQueueLabel = new JLabel("JMS_QUEUE:");
jmsQueueLabel.setBounds(10, 125, 150, 25);
panel.add(jmsQueueLabel);
jmsQueueText = new JTextField(50);
jmsQueueText.setBounds(150, 125, 250, 25);
panel.add(jmsQueueText);
// 全部重置
resetButton = new JButton("全部重置");
resetButton.setBounds(10, 160, 80, 25);
panel.add(resetButton);
// 连接并发送
submitButton = new JButton("连接并发送");
submitButton.setBounds(150, 160, 80, 25);
panel.add(submitButton);
// 连接并发送事件
submitButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// 进行逻辑处理即可
System.out.println("触发连接并发送");
connAndSend();
}
});
// 全部重置
resetButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// 进行逻辑处理即可
System.out.println("resetButton");
reset();
}
});
}
/**
*
* connAndSend:连接并发送 <br/>
*
* @since JDK 1.7
*/
private static void connAndSend() {
System.out.println("您发送的报文是:" + jmsMessageTextArea.getText());
QueueSession session = null;
QueueSender queueSender = null;
QueueConnection conn = null;
TextMessage textMessage = null;
try {
Hashtable env = new Hashtable();
env.put(InitialContext.INITIAL_CONTEXT_FACTORY, jmsInitJndiText.getText());
env.put(InitialContext.PROVIDER_URL, jmsInitServerurlText.getText());
InitialContext iniCtx = new InitialContext(env);
// 创建连接工厂
Object factory = iniCtx.lookup(jmsFactoryText.getText());
QueueConnectionFactory qcf = (QueueConnectionFactory) factory;
// 创建连接
conn = qcf.createQueueConnection();
if (null != conn) {
conn.start();
} else {
System.out.println("QueueConnection实例化失败");
return;
}
// 获取队列
Queue queue = (Queue) iniCtx.lookup(jmsQueueText.getText());
// 创建会话
session = conn.createQueueSession(false, QueueSession.AUTO_ACKNOWLEDGE);
if (null != session) {
textMessage = session.createTextMessage();
textMessage.clearBody();
textMessage.setText(jmsMessageTextArea.getText());
} else {
System.out.println("QueueSession实例化失败");
return;
}
// 发送消息
queueSender = session.createSender(queue);
if (null != queueSender) {
queueSender.send(textMessage);
} else {
System.out.println("QueueSender实例化失败");
return;
}
} catch (Exception e) {
System.out.println("往JMS队列插入消息失败:" + jmsMessageTextArea.getText());
e.printStackTrace();
} finally {
try {
if (queueSender != null) {
queueSender.close();
}
if (session != null) {
session.close();
}
if (conn != null) {
conn.close();
}
} catch (JMSException e) {
e.printStackTrace();
}
}
}
/**
*
* reset:全部重置 <br/>
*
* @since JDK 1.7
*/
private static void reset() {
System.out.println("1111");
}
/**
*
* placeMessage:消息面板内容设置 <br/>
*
* @param panel
* @since JDK 1.7
*/
private static void placeMessage(JPanel panel) {
panel.setLayout(null);
// 创建 JMS_MESSAGE
JLabel jmsMessageLabel = new JLabel("JMS_MESSAGE:");
jmsMessageLabel.setBounds(10 + PANEL_WIDTH, 20, 400, 25);
panel.add(jmsMessageLabel);
jmsMessageTextArea = new JTextArea(250, 300);
jmsMessageTextArea.setBounds(10 + PANEL_WIDTH, 55, 400, 300);
panel.add(jmsMessageTextArea);
}
}