2014-01-22 33 views
0

我試圖在GUI中顯示textArea中的X.509證書的公鑰,而不是使用System.out.println()。當我嘗試使用setText()在textArea中顯示它時,它沒有在textArea中顯示它。下面的方法readCertificate提取證書的領域,ActionPerformed(ActionEvent e)是簡單的激活動作底部:如何在textArea中顯示文本(更新)

public void actionPerformed(ActionEvent e){ 
    File f = new File("/Users/AhmadAseeri/Desktop/cer.cer"); 
    Read r = new Read(); 
    r.readCertificate(f); 
} 

public void readCertificate(File f) throws Exception { 
    CertificateFactory cf = CertificateFactory.getInstance("X.509"); 
    BufferedInputStream in = new BufferedInputStream(new FileInputStream(f)); 
    while (in.available() > 0) { 
     Certificate cert = cf.generateCertificate(in); 
     String c=String.valueOf(cert.getPublicKey()); 
     JTextArea textArea= new JTextArea(); 
     textArea.setText(c); 
    } 
    in.close(); 
} 
+1

什麼錯誤? – exexzian

+0

發佈編譯器異常消息或堆棧跟蹤。 –

+0

您是否遇到運行時錯誤或編譯器錯誤? –

回答

1

您正在使用一個JTextArea,但你不將它添加到任何容器。

這樣,它永遠不會顯示。

Here你可以找到一個使用該組件構建簡單GUI的例子。

+0

非常感謝你....這真的很有幫助。我很感激 – Mike

0

你的問題是,你正在創建的while循環內的textArea,方法readCertificate(File f)內:

public void readCertificate(File f) throws Exception { 
    CertificateFactory cf = CertificateFactory.getInstance("X.509"); 
    BufferedInputStream in = new BufferedInputStream(new FileInputStream(f)); 
    while (in.available() > 0) { 
     Certificate cert = cf.generateCertificate(in); 
     String c=String.valueOf(cert.getPublicKey()); 
     JTextArea textArea= new JTextArea();//???????????????????????????????? 
     textArea.setText(c); 
    } 
    in.close(); 
} 

必須幀/面板,或當你想在創建它,但不存在。

1

如前所述:

  • 你不文本區域添加到任何容器,所以它永遠不會是可見的。
  • 您在while循環內創建這個文本區域是錯誤的。 GUI初始化時,您必須創建文本區域並將其添加到容器中。
  • 您可能需要嘗試append(String str)方法,而不是setText(String str)

此外

輸入 - 輸出操作是耗時的任務和可能堵塞Event Dispatch Thread(又名EDT)使GUI不響應。爲避免此問題,請考慮使用SwingWorker在後臺線程中執行IO操作並更新EDT中的Swing組件。查看更多有關這件事Concurrency in Swing線索

public void readCertificate(final File f) {   
    SwingWorker<Void, String> worker = new SwingWorker<Void, String>() { 
     @Override 
     protected Void doInBackground() throws Exception { 
      CertificateFactory cf = CertificateFactory.getInstance("X.509"); 
      BufferedInputStream in = new BufferedInputStream(new FileInputStream(f)); 
      while (in.available() > 0) { 
       Certificate cert = cf.generateCertificate(in); 
       String c = String.valueOf(cert.getPublicKey()); 
       publish(c); 
      } 
      in.close(); 
      return null; 
     } 

     @Override 
     protected void process(List<String> chunks) { 
      for(String key : chunks) { 
       textArea.append(key + System.lineSeparator()); 
      } 
     }    
    }; 
    worker.execute(); 
} 
相關問題