2011-03-23 55 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