今天,我想通过制作列出目录中所有文件的东西来获取java(这样我就可以很容易地看到我在数字卡片集中遗漏了哪些卡片。) 我让文件walker工作,但是,它没有将文件名附加到我制作的JTextArea。
我有这段代码:
package finlaydag33k.swing.gui;
import java.awt.EventQueue;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.stream.Stream;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextArea;
import javax.swing.border.EmptyBorder;
import net.miginfocom.swing.MigLayout;
public class Gui extends JFrame {
private JPanel contentPane;
static JTextArea filePanel = new JTextArea();
/**
* Launch the application.
*/
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
Gui frame = new Gui();
frame.setVisible(true);
try(Stream<Path> paths = Files.walk(Paths.get("/home/finlay/Pictures"))) {
paths.forEach(filePath -> {
if (Files.isRegularFile(filePath)) {
//System.out.println(filePath);
filePanel.append("Hii");
}
});
}
System.out.println(System.currentTimeMillis() - System.currentTimeMillis());
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
/**
* Create the frame.
*/
public Gui() {
setAlwaysOnTop(true);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100, 100, 450, 300);
contentPane = new JPanel();
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
setContentPane(contentPane);
contentPane.setLayout(new MigLayout("", "[][grow]", "[][grow]"));
JTextArea filePanel = new JTextArea();
contentPane.add(filePanel, "cell 1 1,grow");
}
}
在line 34
上,问题似乎发生了(我只是将hii
添加为占位符,以便我找出问题)。
我没有收到任何错误(只有一些警告说
The serializable class Gui does not declare a static final serialVersionUID field of type long
,但这不应该导致它吗?)。
GUI只是加载textArea为空。
我希望有人能帮助我:)
请原谅我在阅读代码时可能会遇到的任何畏缩:) 干杯!
答案 0 :(得分:3)
您有两个名称相同但范围不同的实例:
public class Gui extends JFrame {
static JTextArea filePanel = new JTextArea();
在构造函数中:
public Gui() {
...
JTextArea filePanel = new JTextArea();
这意味着您要将构造函数中声明的那个添加到框架中,但是在主框架中附加静态框架。根本不是同一个实例。
删除静态(因为这没有意义)
public class Gui extends JFrame {
JTextArea filePanel;
删除第二个声明,以在构造函数
中初始化变量public Gui() {
...
filePanel = new JTextArea();
并使用main中的变量实例来访问它
frane.filePanel.append("Hii");
有关更多说明,请在Java中搜索阴影字段。这就是你在做什么。您可以通过在不同范围内声明相同的变量来隐藏变量。