2014-06-25 58 views
-2

我想學習java。我試圖製作一個程序來顯示txt文件中的所有文本,當它讀取一個特定的數字時停止,但它不起作用,我不知道發生了什麼問題。爲什麼這個java代碼不起作用?

這就是我現在所擁有的:

package textLezer; 

import java.io.IOException; 

import javax.swing.JFrame; 
import javax.swing.JLabel; 
import javax.swing.JPanel; 

public class FileData implements Runnable { 

public static final int WIDTH = 320; 
public static final int HEIGHT = WIDTH/12 * 9; 
public static final int SCALE = 3; 
public final String NAME = "Text lezer"; 

public JFrame frame; 
public static JLabel label = new JLabel(); 
public static JPanel panel = new JPanel(); 

private Thread thread; 

public boolean running = false; 

public void start() { 
    running = true; 

    thread = new Thread(this, NAME + "_main"); 
    thread.start(); 
} 

public void stop() { 
    try { 
     thread.join(); 
    } catch (InterruptedException e) { 
     e.printStackTrace(); 
    } 
} 

public void run() { 
    String file_name = "text/test.txt"; 
    try { 
     ReadFile file = new ReadFile(file_name); 
     String[] aryLines = file.OpenFile(); 

     for (int i = 0; i < aryLines.length; i++) { 
      if (aryLines[i].equals("5")) { 
       return; 
      } else { 
       label.setText("<html>" + label.getText() + " <br> " 
         + aryLines[i] + "</html>"); 
       System.out.println(aryLines[i]); 
      } 
     } 
    } catch (IOException e) { 
     System.out.println(e.getMessage()); 
    } 
} 
} 

啓動程序文件:

package textLezer; 

import java.awt.BorderLayout; 
import java.awt.FlowLayout; 

import javax.swing.JFrame; 

public class Launcher { 

private static FileData data = new FileData(); 

public static void main(String[] args) { 

    FileData.panel.setLayout(new FlowLayout()); 
    FileData.panel.add(FileData.label); 

    data.frame = new JFrame(); 

    data.frame.setTitle(data.NAME); 
    data.frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    data.frame.setLayout(new BorderLayout()); 
    data.frame.setSize(800, 400); 
    data.frame.add(FileData.panel, BorderLayout.CENTER); 
    data.frame.setResizable(false); 
    data.frame.setLocationRelativeTo(null); 
    data.frame.setVisible(true); 

    data.start(); 
} 
} 

和TXT文件:

1 
2 
3 
4 
5 
6 
7 
8 
+1

你還沒有說什麼不好:) – rook

+4

「它din't工作」沒有提供足夠的信息。發生了什麼?你能減少你的代碼到一個更簡短的例子嗎?例如,你真的需要用戶界面來展示問題嗎?見http://tinyurl.com/so-hints –

+0

1)程序做了什麼,你期望什麼? 2)小細節:使用'WIDTH * 9/12'而不是'WIDTH/12 * 9'。你正在使用整數,而整數除法總是朝向零。爲了減少舍入誤差,先進行乘法,然後再進行除法。 –

回答

0

與您的代碼的問題是您在使用return;裏面的for循環。您實際需要的是break;聲明

另外,您爲多行標籤創建html的方式也是錯誤的。它不會工作,因爲生成的最終html將是

<html><html><html><html> <br> 1</html> <br> 2</html> <br> 3</html> <br> 4</html> 

所以你應該改進你的連接邏輯。

public void run() { 
    String file_name = "text/test.txt"; 
    try { 
     ReadFile file = new ReadFile(file_name); 
     String[] aryLines = file.OpenFile(); 

     StringBuilder innerText = new StringBuilder(); 
     for (int i = 0; i < aryLines.length; i++) { 
      if (aryLines[i].equals("5")) { 
       break; 
      } else { 
       innerText.append(aryLines[i]).append("<br/>"); 
      } 
     } 
     label.setText("<html>" + innerText.toString() + "</html>"); 
    } catch (IOException e) { 
     System.out.println(e.getMessage()); 
    } 
} 
相關問題