使用java swing打印文本文件

时间:2018-03-13 17:08:45

标签: java swing file user-interface text

我创建了两个类,第一个从文件中读取,而seconde应该使用java swing打印文件,但它显示的唯一的东西是null我试图使用String.valueOf(word)将word转换为字符串但是这不起作用

private static String getFileInfo(){    

    File listOfWords = new File("words.txt");

    try {
        BufferedReader getInfo = new BufferedReader(new FileReader(listOfWords));
        String word = getInfo.readLine();
        while(word!=null) {
            System.out.println(word);
            word = getInfo.readLine();
        }
    }
    catch(FileNotFoundException e) {
       System.exit(0);
    }
    catch(IOException e){   
        System.exit(0);
    }
    return word;
}

public LabelThread() {
    try {
        JFrame frame  = new JFrame("Label");
        frame.setSize(500, 500);

        textLabel = new JLabel(String.valueOf(word));
        frame.setContentPane(textLabel);

        frame.setVisible(true);

        MyThread thread = new MyThread();
        MyThread.sleep(15000); // 15 secondes then 10 then 5
        thread.start();  

    } catch (InterruptedException ex) {

    }
}
class MyThread extends Thread{


    public void run() {
        System.out.print("Running thread");
        textLabel.setText("");
    }

1 个答案:

答案 0 :(得分:0)

当调度Swing JComponents的更改在Event Dispatch Thread上运行时,您只能更改标签文本之类的内容。 https://docs.oracle.com/javase/tutorial/uiswing/concurrency/dispatch.html

为了做到这一点,试试这个:

class MyRunnable implements Runnable{
    public void run() {
        System.out.print("Running thread");
        textLabel.setText("");
    }
}

然后......

Runnable my Runnable = new MyRunnable(....);
javax.swing.SwingUtilities.invokeLater(myRunnable);

那应该设置你希望实现的标签文本。最好安排所有这样的摆动组件的绘画。

你永远不应该使用EDT进行长时间运行:只有GUI绘画。如果你有一个混合了I / O和GUI绘画的任务,你需要使用SwingWorker