2011-03-23 54 views
0

的我有称为readGUI的GUI类和称为监听器类主题输出写入到一个textarea在不同的类,而不是使用System.out.println

目的是从打印输出标题在textArea位于readGUI

我不知道如何做到这一点,但我试图追加textarea即。

在GUI类

我加

 public void receiveMsg (String s) 
    { jTextArea1.append(s); 
    } 

while in listner classs Topics I added the two lines after the commented out System.out.printlm(messageText) 

public void onMessage(Message message) 
{ 
    try 
    { 
    String messageText = null; 
    if (message instanceof TextMessage) 
    messageText = ((TextMessage)message).getText(); 
    // System.out.println(messageText); 
readGUI rm = readGUI(); 
rm.receiveMsg(messageText); 
    } 
    catch (JMSException e) 
    { 
    e.printStackTrace(); 
    } 
} 

读心人打印发布到正确的主题的消息,但不是在控制台上,我想放在结果上的GUI我从

被叫两个完整的类是下面是否有帮助 readGUI

public class readGUI extends javax.swing.JFrame { 

    /** Creates new form readMessages */ 
    public readGUI() { 
     initComponents(); 
    } 

    /** This method is called from within the constructor to 
    * initialize the form. 
    * WARNING: Do NOT modify this code. The content of this method is 
    * always regenerated by the Form Editor. 
    */ 
    @SuppressWarnings("unchecked") 
    // <editor-fold defaultstate="collapsed" desc="Generated Code"> 
    private void initComponents() { 

     jLabel1 = new javax.swing.JLabel(); 
     topicCombobox = new javax.swing.JComboBox(); 
     jScrollPane1 = new javax.swing.JScrollPane(); 
     jTextArea1 = new javax.swing.JTextArea(); 
     jLabel2 = new javax.swing.JLabel(); 
     listenme = new javax.swing.JButton(); 
     jButton2 = new javax.swing.JButton(); 
     jScrollPane2 = new javax.swing.JScrollPane(); 
     jTextArea2 = new javax.swing.JTextArea(); 
     jComboBox2 = new javax.swing.JComboBox(); 
     jComboBox3 = new javax.swing.JComboBox(); 
     jLabel3 = new javax.swing.JLabel(); 
     jLabel4 = new javax.swing.JLabel(); 

     setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE); 

     jLabel1.setFont(new java.awt.Font("Tahoma", 1, 14)); 
     jLabel1.setText("Listen for specific messages"); 
     // String [] tlist = { "topic1", "WGB1", "WGB2", "Item 4" }; 
     topicCombobox.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "topic1", "WGB1", "WGB2", "Item 4" })); 

     jTextArea1.setColumns(20); 
     jTextArea1.setRows(5); 
     jScrollPane1.setViewportView(jTextArea1); 

     jLabel2.setText("Location:"); 

     listenme.setText("Listen"); 
     listenme.addActionListener(new java.awt.event.ActionListener() { 
      public void actionPerformed(java.awt.event.ActionEvent evt) { 
       jButton1ActionPerformed(evt); 
      } 
     }); 

     jButton2.setText("Get complete log"); 
     jButton2.addActionListener(new java.awt.event.ActionListener() { 
      public void actionPerformed(java.awt.event.ActionEvent evt) { 
       jButton2ActionPerformed(evt); 
      } 
     }); 

     jTextArea2.setColumns(20); 
     jTextArea2.setRows(5); 
     jScrollPane2.setViewportView(jTextArea2); 

     jComboBox2.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Item 1", "Item 2", "Item 3", "Item 4" })); 

     jComboBox3.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Item 1", "Item 2", "Item 3", "Item 4" })); 

     jLabel3.setFont(new java.awt.Font("Tahoma", 0, 14)); // NOI18N 
     jLabel3.setText("Sensor"); 

     jLabel4.setFont(new java.awt.Font("Tahoma", 0, 14)); // NOI18N 
     jLabel4.setText("Location"); 

     javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane()); 
     getContentPane().setLayout(layout); 
     layout.setHorizontalGroup(
      layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
      .addGroup(layout.createSequentialGroup() 
       .addGap(71, 71, 71) 
       .addComponent(jLabel2) 
       .addGap(30, 30, 30) 
       .addComponent(topicCombobox, javax.swing.GroupLayout.PREFERRED_SIZE, 129, javax.swing.GroupLayout.PREFERRED_SIZE) 
       .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 81, Short.MAX_VALUE) 
       .addComponent(listenme, javax.swing.GroupLayout.PREFERRED_SIZE, 246, javax.swing.GroupLayout.PREFERRED_SIZE) 
       .addGap(46, 46, 46)) 
      .addGroup(layout.createSequentialGroup() 
       .addGap(219, 219, 219) 
       .addComponent(jLabel1) 
       .addContainerGap(239, Short.MAX_VALUE)) 
      .addGroup(layout.createSequentialGroup() 
       .addGap(19, 19, 19) 
       .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
        .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup() 
         .addGap(22, 22, 22) 
         .addComponent(jLabel4, javax.swing.GroupLayout.PREFERRED_SIZE, 66, javax.swing.GroupLayout.PREFERRED_SIZE) 
         .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) 
         .addComponent(jComboBox3, javax.swing.GroupLayout.PREFERRED_SIZE, 102, javax.swing.GroupLayout.PREFERRED_SIZE) 
         .addGap(44, 44, 44) 
         .addComponent(jLabel3, javax.swing.GroupLayout.PREFERRED_SIZE, 60, javax.swing.GroupLayout.PREFERRED_SIZE) 
         .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 50, Short.MAX_VALUE) 
         .addComponent(jComboBox2, javax.swing.GroupLayout.PREFERRED_SIZE, 83, javax.swing.GroupLayout.PREFERRED_SIZE) 
         .addGap(32, 32, 32) 
         .addComponent(jButton2, javax.swing.GroupLayout.PREFERRED_SIZE, 127, javax.swing.GroupLayout.PREFERRED_SIZE) 
         .addGap(32, 32, 32)) 
        .addGroup(layout.createSequentialGroup() 
         .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) 
          .addComponent(jScrollPane2, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, 609, Short.MAX_VALUE) 
          .addComponent(jScrollPane1, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.PREFERRED_SIZE, 609, javax.swing.GroupLayout.PREFERRED_SIZE)) 
         .addContainerGap(19, Short.MAX_VALUE)))) 
     ); 
     layout.setVerticalGroup(
      layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
      .addGroup(layout.createSequentialGroup() 
       .addContainerGap() 
       .addComponent(jLabel1) 
       .addGap(11, 11, 11) 
       .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 100, javax.swing.GroupLayout.PREFERRED_SIZE) 
       .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) 
       .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) 
        .addComponent(jLabel2) 
        .addComponent(listenme) 
        .addComponent(topicCombobox, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) 
       .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) 
       .addComponent(jScrollPane2, javax.swing.GroupLayout.PREFERRED_SIZE, 106, javax.swing.GroupLayout.PREFERRED_SIZE) 
       .addGap(18, 18, 18) 
       .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) 
        .addComponent(jButton2) 
        .addComponent(jComboBox2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) 
        .addComponent(jComboBox3, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) 
        .addComponent(jLabel4) 
        .addComponent(jLabel3)) 
       .addContainerGap(31, Short.MAX_VALUE)) 
     ); 

     pack(); 
    }// </editor-fold> 

    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {           
     System.out.println("test test test"); 
     System.out.print("you pressed" +topicCombobox.getSelectedItem()); 
     //TopicPublish tp = new TopicPublish(); 
     TopicS a = new TopicS(); 
a.addTopicToListner((String) topicCombobox.getSelectedItem()); 
//int i = topicCombobox.getSelectedIndex(); 
//a.addTopicToListner(tlist[i]); 
    }           

    private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) { 
     // TODO add your handling code here: 
    } 

    /** 
    * @param args the command line arguments 
    */ 
    public static void main(String args[]) { 
     java.awt.EventQueue.invokeLater(new Runnable() { 
      public void run() { 
       new readGUI().setVisible(true); 
      } 
     }); 

} 
    public void receiveMsg (String s) 
{jTextArea1.append(s); 
} 
    // Variables declaration - do not modify 
    private javax.swing.JButton listenme; 
    private javax.swing.JButton jButton2; 
    private javax.swing.JComboBox topicCombobox; 
    private javax.swing.JComboBox jComboBox2; 
    private javax.swing.JComboBox jComboBox3; 
    private javax.swing.JLabel jLabel1; 
    private javax.swing.JLabel jLabel2; 
    private javax.swing.JLabel jLabel3; 
    private javax.swing.JLabel jLabel4; 
    private javax.swing.JScrollPane jScrollPane1; 
    private javax.swing.JScrollPane jScrollPane2; 
    private javax.swing.JTextArea jTextArea1; 
    private javax.swing.JTextArea jTextArea2; 
    // End of variables declaration 

} 

个主题

import java.util.Hashtable; 

import javax.jms.JMSException; 
import javax.jms.Message; 
import javax.jms.MessageListener; 
import javax.jms.Session; 
import javax.jms.TextMessage; 
import javax.jms.Topic; 
import javax.jms.TopicConnection; 
import javax.jms.TopicConnectionFactory; 
import javax.jms.TopicSession; 
import javax.jms.TopicSubscriber; 
import javax.naming.Context; 
import javax.naming.InitialContext; 
import javax.naming.NamingException; 

public class TopicS implements MessageListener 
{ 

private TopicConnection topicConnection; 
private TopicSession topicSession; 
public Topic topic; 
private TopicSubscriber topicSubscriber; 


public TopicS() 
      {} 
      public void addTopicToListner(String t){ 
    try 
    { 
    // create a JNDI context 
    Hashtable properties = new Hashtable(); 
    properties.put(Context.INITIAL_CONTEXT_FACTORY,"org.exolab.jms.jndi.InitialContextFactory"); 
    properties.put(Context.PROVIDER_URL,"rmi://localhost:1099/"); 
    Context context = new InitialContext(properties); 

    // retrieve topic connection factory 
    TopicConnectionFactory topicConnectionFactory = 
     (TopicConnectionFactory)context.lookup("JmsTopicConnectionFactory"); 
    // create a topic connection 
    topicConnection = topicConnectionFactory.createTopicConnection(); 

    // create a topic session 
    // set transactions to false and set auto acknowledgement of receipt of messages 
    topicSession = topicConnection.createTopicSession(false,Session.AUTO_ACKNOWLEDGE); 

    // retrieve topic 
    topic = (Topic) context.lookup(t); 

    // create a topic subscriber and associate to the retrieved topic 
    topicSubscriber = topicSession.createSubscriber(topic); 

    // associate message listener 
    topicSubscriber.setMessageListener(this); 

    // start delivery of incoming messages 
    topicConnection.start(); 
    } 
    catch (NamingException e) 
    { 
    e.printStackTrace(); 
    } 
    catch (JMSException e) 
    { 
    e.printStackTrace(); 
    } 
} 

/* public static void main(String[] args) 
//{ 

    try 
    { 
    TopicS listener = new TopicS(); 
    Thread.currentThread().sleep(2000); 
    } 

    catch (InterruptedException e) 
    { 
    e.printStackTrace(); 
    } 
} 
*/ 
// process incoming topic messages 
public void onMessage(Message message) 
{ 
    try 
    { 
    String messageText = null; 
    if (message instanceof TextMessage) 
    messageText = ((TextMessage)message).getText(); 
    // System.out.println(messageText); 
readGUI rm = readGUI(); 
rm.receiveMsg(messageText); 
    } 
    catch (JMSException e) 
    { 
    e.printStackTrace(); 
    } 
} 
} 
+0

可能重复的[如何将控制台内容重定向到java中的textArea?](http://stackoverflow.com/questions/5107629/how-to-redirect-console-content-to-a-textarea-in- java) – trashgod 2011-03-24 00:04:24

回答

1

如果要添加文本的组成部分,这项工作正在做 GUI线程你将有问题的。这似乎是你在这里做的。使用

SwingUtilities.invokeLater(new Runnable() { 
    public void run() { 
     rm.receiveMsg(messageText); 
    } 
}); 

因此,这项工作是在gui线程上完成的。

,我也想知道你用这个做什么:

readGUI rm = readGUI(); 

好像你正试图调用构造函数,而无需创建一个对象或东西。

+0

你添加的代码在哪里?我也可以使用readGUI rm = readGUI()的思想,我可以将输出的文本发送到readGUI的JtextArea1中。在readGUI中,所以也许我误解了你写的第一行文字 我很感谢你的回复,但我仍然不能100%确定如何继续,谢谢 – skal 2011-03-24 00:51:33

+0

某段代码可能已经创建了一个readGUI类的实例,并显示窗口。所以TopicS实例需要引用readGUI类的特定实例。所以你应该改变你的TopicS构造函数来获取一个readGUI的实例并将该引用存储在一个成员变量中。然后,当你想填充该字段时,引用该字段。 – MeBigFatGuy 2011-03-24 03:01:28