![](/img/trans.png)
[英]Java how to make JTextArea Accesible from different class and write in integer
[英]Write to jTextArea from different class
只是想知道是否可以將一個類中的jTextArea追加到一個單獨的類中? 我基本上有一個不斷運行計算的簡單類,我想在自己的類中創建的GUI上查看輸出。 該程序可以通過System.out.println執行良好,但我現在想在我的textarea上查看。 在此先感謝您的指導。
已更新-以下代碼是我正在運行的代碼。 有問題的區域如下(這是一個很大類的方法):
System.out.println("From Server:" + sentenceFromServer);
我希望將此輸出寫入單獨的jTextArea,它位於下面的類之下的另一個類中。
客戶類別
public void run() {
SocketForm form = new SocketForm();
//File file=null;
long startTime; // Starting time of program, in milliseconds.
long endTime; // Time when computations are done, in milliseconds.
double time;
System.out.println("Variables Set");
String serverName = "localhost";
try {
//if (args.length >= 1)
// serverName = args[0];
InetAddress serverIPAddress = InetAddress.getByName(serverName);
//get server port;
int serverPort = form.cliportNo;
//if (args.length >= 2)
// serverPort = Integer.parseInt(args[1]);
//create socket
DatagramSocket clientSocket = new DatagramSocket();
//get input from keybaord
byte[] sendData = new byte[byteSize];
//BufferedReader inFromUser = new BufferedReader(new InputStreamReader (System.in));
//while (true){
//String sentence = inFromUser.readLine();
startTime = System.currentTimeMillis();
//sendData = sentence.getBytes();
System.out.println("About to identify image");
String fileName = "/Users/Andrew/Desktop/pic.jpg";
File f = new File(fileName);
FileInputStream fis = null;
try {
fis = new FileInputStream(f);
System.out.println("Total file size to read in bytes is : " + fis.available());
} catch (IOException e) {}
Path path = Paths.get("/Users/Andrew/Desktop/pic.jpg");
//byte[] data = Fles.readAllBytes(path);
sendData = Files.readAllBytes(path);
try {
for( int index = 0; index < sendData.length ; index += byteSize ) {
DatagramPacket packet = new DatagramPacket( sendData, index, Math.min( byteSize, sendData.length-index ), serverIPAddress, serverPort);
clientSocket.send(packet);
//DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, serverIPAddress, serverPort);
//receive datagram
byte[] receiveData = new byte [byteSize];
DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length);
clientSocket.receive(receivePacket);
//print output
String sentenceFromServer = new String(receivePacket.getData());
System.out.println("From Server:" + sentenceFromServer);
}
System.out.println("The End");
}
catch (Exception e) {}
//close client socket
//clientSocket.close();
endTime = System.currentTimeMillis();
time = endTime - startTime;
System.out.println("Time :" + time);
// }
}
catch (Exception e) {}
}
SocketForm類(GUI)
public static void main(String args[]) {
/* Set the Nimbus look and feel */
//<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) ">
/* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel.
* For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html
*/
try {
for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
if ("Nimbus".equals(info.getName())) {
javax.swing.UIManager.setLookAndFeel(info.getClassName());
break;
}
}
} catch (ClassNotFoundException ex) {
java.util.logging.Logger.getLogger(SocketForm.class.getName()).log(java.util.logging.Level.SEV
}
//</editor-fold>
/* Create and display the form */
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new SocketForm().setVisible(true);
}
});
}
// Variables declaration - do not modify
private javax.swing.ButtonGroup buttonGroup1;
private javax.swing.JPanel jPanel1;
private javax.swing.JPanel jPanel2;
private javax.swing.JScrollPane jScrollPane1;
private javax.swing.JScrollPane jScrollPane2;
private javax.swing.JTabbedPane jTabbedPane1;
public static javax.swing.JTextArea jTextArea1;
private javax.swing.JTextField jTextField1;
private javax.swing.JTextField jTextField2;
// End of variables declaration
}
意見建議:
public void appendText(String text)
,該方法將文本String附加到JTextArea。 SwingWorker<Void, String>
並使用發布/處理方法對從服務器到JTextArea中發送字符串,在擺動Ë通氣d ispatchŤhread或EDT。 catch (IOException e) {}
。 這相當於閉着眼睛駕駛摩托車。 是的,乍一看似乎很有趣,但是幾乎總會以糟糕的結果結束。 編輯
您聲明:
“如果如您所說僅適合在EDT上運行它,那么如何在已經運行的線程中定義它呢?”
我知道兩種方式:
SwingUtilities.invokeLater(...)
方法的Runnable內。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.