2013-03-12 3 views
-1

ниже моего кода i code wright для gps дает мне данные coninue на скорости 4800 бод этот дисплей данных продолжается с помощью «System.out.println (st)», но те же данные не отображаются в a.setText (st), где a - текстовое поле переменная. некоторые знают, как обновить мое текстовое поле, например, System.out.println.Почему текстовое поле не является автоматическим обновлением в java?

import java.io.BufferedReader; 
import java.io.IOException; 
import java.io.InputStreamReader; 
import java.util.Enumeration; 
import java.util.TooManyListenersException; 
import java.util.logging.Level; 
import java.util.logging.Logger; 
import javax.comm.UnsupportedCommOperationException; 
import javax.comm.*; 
/* 
* To change this template, choose Tools | Templates 
* and open the template in the editor. 
*/ 

/* 
* test.java 
* 
* Created on Mar 11, 2013, 9:08:52 AM 
*/ 
/** 
* 
* @author DJ ROCKS 
*/ 
public class test extends javax.swing.JFrame { 
    public boolean bp=true; 

    /** Creates new form test */ 
    public test() { 
     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() { 

     ok = new javax.swing.JButton(); 
     a = new javax.swing.JTextField(); 

     setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE); 

     ok.setText("ok"); 
     ok.addActionListener(new java.awt.event.ActionListener() { 
      public void actionPerformed(java.awt.event.ActionEvent evt) { 
       okActionPerformed(evt); 
      } 
     }); 

     a.setText(" "); 
     a.addActionListener(new java.awt.event.ActionListener() { 
      public void actionPerformed(java.awt.event.ActionEvent evt) { 
       aActionPerformed(evt); 
      } 
     }); 

     javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane()); 
     getContentPane().setLayout(layout); 
     layout.setHorizontalGroup(
      layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
      .addGroup(layout.createSequentialGroup() 
       .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
        .addGroup(layout.createSequentialGroup() 
         .addGap(62, 62, 62) 
         .addComponent(a, javax.swing.GroupLayout.PREFERRED_SIZE, 394, javax.swing.GroupLayout.PREFERRED_SIZE)) 
        .addGroup(layout.createSequentialGroup() 
         .addGap(238, 238, 238) 
         .addComponent(ok))) 
       .addContainerGap(124, Short.MAX_VALUE)) 
     ); 
     layout.setVerticalGroup(
      layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
      .addGroup(layout.createSequentialGroup() 
       .addContainerGap() 
       .addComponent(a, javax.swing.GroupLayout.PREFERRED_SIZE, 39, javax.swing.GroupLayout.PREFERRED_SIZE) 
       .addGap(67, 67, 67) 
       .addComponent(ok) 
       .addContainerGap(160, Short.MAX_VALUE)) 
     ); 

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

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

     if(evt.getSource()==ok) 
     { 
      CommPortIdentifier portId = null; 
String wantedPortName="COM16"; 

Enumeration portIdentifiers = CommPortIdentifier.getPortIdentifiers(); 


while(portIdentifiers.hasMoreElements()) 
{ 
    CommPortIdentifier pid = (CommPortIdentifier) portIdentifiers.nextElement(); 
    if(pid.getPortType() == CommPortIdentifier.PORT_SERIAL && 
     pid.getName().equals(wantedPortName)) 
    { 
     portId = pid; 
     break; 
    } 
} 
if(portId == null) 
{ 
    System.err.println("Could not find serial port " + wantedPortName); 
    System.exit(1); 
} 
else 
{ 
    System.out.println("system find gps reciever"); 
} 
SerialPort port = null; 
try { 
    port = (SerialPort) portId.open(
     "RMC", 
     1); 
    System.out.println("all are ok"); 
} catch(PortInUseException e) { 
    System.err.println("Port already in use: " + e); 
    System.exit(1); 
} 
      try { 
       //int i=Integer.parseInt(new vps().baud_rate.getItemAt(new vps().baud_rate.getItemCount())); 
       port.setSerialPortParams(
        4800, 
        SerialPort.DATABITS_8, 
        SerialPort.STOPBITS_1, 
        SerialPort.PARITY_NONE); 
      } catch (UnsupportedCommOperationException ex) { 
       Logger.getLogger(test.class.getName()).log(Level.SEVERE, null, ex); 
      } 



BufferedReader is = null; 


try { 
    is = new BufferedReader(new InputStreamReader(port.getInputStream())); 
    System.out.println("data is ok"); 
} catch (IOException e) { 
    System.err.println("Can't open input stream: write-only"); 
    is = null; 
} 



//this is variable is ouside of class and define by public it work 
    while(true) 
    { 

String st = null; 
       try { 
        st = is.readLine(); 
       } catch (IOException ex) { 
        Logger.getLogger(test.class.getName()).log(Level.SEVERE, null, ex); 
       } 


     System.out.println(st); 
     //st = st.replace(st, ""); 
     a.setText(st); 
     try 
     { 

      Thread.sleep(1000); 
     } 
     catch(InterruptedException ie) 
     { 
      System.out.printf(ie.getMessage()); 
     } 
} 
/*if (is != null) try { 
       is.close(); 
      } catch (IOException ex) { 
       Logger.getLogger(test.class.getName()).log(Level.SEVERE, null, ex); 
      } 

if (port != null) port.close(); 
*/ 
} 



    }         

    private void aActionPerformed(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 test().setVisible(true); 
      } 
     }); 
    } 
    // Variables declaration - do not modify 
    private javax.swing.JTextField a; 
    private javax.swing.JButton ok; 
    // End of variables declaration 
} 
+1

Что такое «текстовое поле»? Я не знаю какого-либо компонента по этому имени. – camickr

+4

Не блокируйте EDT (Thread Dispatch Thread) - графический интерфейс «замерзнет», когда это произойдет. Вместо вызова 'Thread.sleep (n)' реализовать Swing 'Timer' для повторения задач или' SwingWorker' для длительных задач. Подробнее см. [Параллелизм в Swing] (http://docs.oracle.com/javase/tutorial/uiswing/concurrency/). –

+0

когда я не использую Thread.sleep() это время тоже такая же проблема возникла. – dharma11

ответ

0

Кажется, что вы можете переписать одну и ту же строку. Я бы попытался вызвать метод «get», который возвращает String вместо обращения к переменной «st». Я делаю это, чтобы избежать ситуаций, когда программа попытается переписать строку, поскольку строки являются неизменяемыми.

Я хотел бы попробовать что-то вроде этого:

private String getString() 
{ 
try { 
    String st = new String(""+is.ReadLine()); 
    return st; 
    } catch (IOException ex) { 
       Logger.getLogger(test.class.getName()).log(Level.SEVERE, null, ex); 
} 

Используйте это для обозначения новой строки из BufferedReader «является»:

a.setText(getString()); 

Кроме того, это выглядит так, как будто у вас есть блок кода в пределах строк комментариев здесь:

/*if (is != null) try { 
      is.close(); 
     } catch (IOException ex) { 
      Logger.getLogger(test.class.getName()).log(Level.SEVERE, null, ex); 
     if (port != null) port.close(); 
}*/ 

Пожалуйста, исправьте меня, если я ошибаюсь.

+0

мой друг, я уже применил эту логику, но эта логика дает мне одну строку в текстовом поле, но я хочу продолжить строку, используя цикл. – dharma11

+0

Вы пробовали обновить его в потоке пользовательского интерфейса? К сожалению, это Java, а не Android, пренебрежение. – ibtokin

Смежные вопросы