2012-10-21 37 views
4

我們被分配創建一個簡單的編譯器作爲一個家庭作業,它將採取一組指令(包含變量,條件,跳轉等)並對它們進行評估。這已經完成了,但我認爲我會讓我的程序更加有趣......「閃亮」,並且增加了從文本文件加載指令的能力,僅僅是爲了用戶的舒適;然而,似乎JTextAreaappend()方法似乎並不真的喜歡我,因爲它完全沒有。下面是相關的代碼:(我使用的,而不是Swing的JFileChooser的AWT的FileDialog的,因爲它只是看起來在Mac上更好,如在Apple's official recommendationJTextArea的append()方法似乎不起作用

BufferedReader bufferedReader; 
File file; 
FileDialog fileDialog = new FileDialog (new Frame(), "Open File", FileDialog.LOAD); 
String line; 

fileDialog.setVisible (true); 

if (fileDialog.getFile() != null) { 
    file = new File (fileDialog.getDirectory() + fileDialog.getFile()); 
    input.setText (""); // delete old first 

    try { 
     bufferedReader = new BufferedReader (new FileReader (file)); 
     line = bufferedReader.readLine(); 

     while (line != null) { 
      input.append (line); 
      System.out.println (line); 
      line = bufferedReader.readLine(); 
     } 
    } catch (IOException ioe) { 
     ioe.printStackTrace(); 
    } 
} 

在此代碼點來的input變量JTextArea實例。有趣的是 - 文件讀取部分必須完美地工作,因爲我可以看到正在寫入標準輸出的文件內容,這要歸功於while循環中的System.out.println()調用。但是,JTextArea中沒有任何內容出現,並且我嘗試了在StackOverflow中找到的所有現有解決方案 - 其中包括調用repaint(),revalidate()updateUI()方法。

我錯過了什麼?非常感謝您的答覆!

+6

使用[JTextComponent.read(Reader,Object)](http://docs.oracle.com/javase/7/docs/api/javax/swing/text/JTextComponent.html#read% 28java.io.Reader,%20java.lang.Object%29)。 –

+0

*「我使用的是Awt的FileDialog,而不是Swing的JFileChooser,因爲它在Mac上看起來更好,」*您對Windows和* nix有什麼作用?如果只針對Mac,爲什麼要使用Java而不是..Cocoa或任何OS X本機GUI工具包的名稱? –

+2

*「我們被分配了..一個家庭作業..這已經完成了,但我認爲我會讓我的程序更多一點......」閃亮「」*我之前打算提到這一點,但被問題的技術方面分散注意力。如果是作業,時間通常會更好地用於提高源代碼的可讀性,增加(相關)評論或編寫驗證代碼的測試。更好地提交沒有明顯錯誤的編寫良好的代碼,而不是帶有紅色條紋和破碎的金色星星的代碼,效率低下,寫得不好。 :) –

回答

5

該代碼可能在事件處理循環中調用,您無法繪製該循環。 人們通常會使用

final String line = bufferedReader.relineadLine(); 
// final+local var so usable in Runnable. 

SwingUtilities.invokeLater(new Runnable() { 
    @Override 
    public void run() { 
     input.append(line + "\n"); 
    } 
} 

不幸的是它需要一些關懷在哪裏放置invokeLatere(如循環)。更好地使用@ AndrewThompson的解決方案。