我创建了两个类,第一个从文件中读取,而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("");
}
答案 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
。