【Java开源代码栏目提醒】:网学会员Java开源代码为您提供TopicSubscriberTest.java参考,解决您在TopicSubscriberTest.java学习中工作中的难题,参考学习。
import javax.jms.*;
import javax.naming.*;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class TopicSubscriberTest extends JPanel
implements ActionListener,MessageListener
{
JTextField topicField;
JList messageList;
DefaultListModel messages;
TopicSession session;
TopicSubscriber receiver;
TopicConnection conn;
TopicConnectionFactory factory;
Context context;
public static final String topic_action="topic";
public TopicSubscriberTest(String user)
{
JLabel label;
JButton button;
JPanel tmp;
Font f = new Font("Serif",Font.PLAIN,16);
setFont(f);
try
{
context = new InitialContext();
factory
= (TopicConnectionFactory) context.lookup("TopicConnectionFactory");
conn
= factory.createTopicConnection(user,null);
session
= conn.createTopicSession(false,Session.AUTO_ACKNOWLEDGE);
if(session == null) throw new Exception();
}
catch(Exception exp)
{
exp.printStackTrace();
System.exit(0);
}
setLayout(new BorderLayout(6,6));
messages = new DefaultListModel();
messageList = new JList();
messageList.setModel(messages);
add(new JScrollPane(messageList),"Center");
topicField = new JTextField(20);
topicField.addActionListener(this);
topicField.setActionCommand(topic_action);
label = new JLabel("Topic:");
button = new JButton("Change");
button.addActionListener(this);
button.setActionCommand(topic_action);
tmp = new JPanel();
tmp.setLayout(new FlowLayout(FlowLayout.LEFT,6,0));
label.setFont(f);
topicField.setFont(f);
button.setFont(f);
tmp.add(label);
tmp.add(topicField);
tmp.add(button);
add(tmp,"South");
}
public void setTopic(String name)
{
Topic topic=null;
try
{
conn.stop();
if(receiver != null) receiver.close();
topic
= (Topic) context.lookup(name);
receiver = session.createSubscriber(topic);
conn.start();
if((topic == null)
||(receiver==null)) throw new Exception();
receiver.setMessageListener(this);
messages.removeAllElements();
}
catch(Exception exp)
{
exp.printStackTrace();
System.exit(0);
}
}
public void onMessage(Message msg)
{
try
{
messages.addElement(((TextMessage)msg).getText());
}
catch(Exception exp)
{
JOptionPane.showMessageDialog(this
,exp.toString()
,"Send Error"
,JOptionPane.ERROR_MESSAGE);
}
}
public void actionPerformed(ActionEvent evt)
{
String cmd = evt.getActionCommand();
if(topic_action.equals(cmd))
{
setTopic(topicField.getText());
}
}
public void close()
{
try
{
receiver.close();
session.close();
conn.close();
}
catch(Exception exp)
{
exp.printStackTrace();
}
}
public static void main(String s[])
{
JFrame frame;
TopicSubscriberTest panel;
String user="TopicSubscriberTest";
if(s.length>0) user = s[0];
frame = new JFrame(user);
panel = new TopicSubscriberTest(user);
//So we can catch errors in a log file
System.setErr(System.out);
frame.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
frame.setForeground(Color.black);
frame.setBackground(Color.lightGray);
frame.getContentPane().add(panel,"Center");
frame.pack();
frame.setVisible(true);
frame.addWindowListener(new WindowCloser(panel));
}
}
class WindowCloser extends WindowAdapter
{
TopicSubscriberTest test;
public WindowCloser(TopicSubscriberTest test)
{
this.test = test;
}
public void windowClosing(WindowEvent e)
{
Window win = e.getWindow();
test.close();
win.setVisible(false);
System.exit(0);
}
}