Java 为什么我的JTextArea append不工作

Java 为什么我的JTextArea append不工作,java,swing,Java,Swing,今天,我想学习java,通过制作一些东西来列出目录中的所有文件(这样我就可以很容易地看到我在数字卡收藏中错过了哪些卡)。 我让file walker开始工作,但是,它不会将文件名附加到我创建的JTextArea 我有以下代码: package finlaydag33k.swing.gui; import java.awt.EventQueue; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file

今天,我想学习java,通过制作一些东西来列出目录中的所有文件(这样我就可以很容易地看到我在数字卡收藏中错过了哪些卡)。
我让file 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");
    }

}
包finlaydag33k.swing.gui;
导入java.awt.EventQueue;
导入java.nio.file.Files;
导入java.nio.file.Path;
导入java.nio.file.path;
导入java.util.stream.stream;
导入javax.swing.JFrame;
导入javax.swing.JPanel;
导入javax.swing.JTextArea;
导入javax.swing.border.EmptyBorder;
导入net.miginfocom.swing.MigLayout;
公共类Gui扩展JFrame{
私有JPanel内容窗格;
静态JTextArea filePanel=newjtextarea();
/**
*启动应用程序。
*/
公共静态void main(字符串[]args){
invokeLater(新的Runnable(){
公开募捐{
试一试{
Gui框架=新Gui();
frame.setVisible(true);
try(Stream path=Files.walk(path.get(“/home/finlay/Pictures”)){
path.forEach(文件路径->{
if(Files.isRegularFile(filePath)){
//System.out.println(文件路径);
filePanel.append(“Hii”);
}
});
}
System.out.println(System.currentTimeMillis()-System.currentTimeMillis());
}捕获(例外e){
e、 printStackTrace();
}
}
});
}
/**
*创建框架。
*/
公共图形用户界面(){
setAlwaysOnTop(真);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
立根(100100450300);
contentPane=newjpanel();
setboorder(新的EmptyBorder(5,5,5,5));
setContentPane(contentPane);
setLayout(新的MigLayout(“,“[[grow]”,“[[grow]”,“[[grow]”);
JTextArea filePanel=新的JTextArea();
add(filePanel,“cell 1,grow”);
}
}
第34行
,问题似乎发生了(我只是在那里添加了
hii
作为占位符,这样我就可以解决问题了)。
我没有收到任何错误(只有一些警告说

serializable类Gui没有声明long类型的静态最终SerialVersionId字段,但这不应该导致它正确吗?。
GUI只是加载文本区域为空。 我希望有人能帮助我:)

请原谅我在阅读代码时可能遇到的任何畏缩:)

干杯

您有两个名称相同但作用域不同的实例:

public class Gui extends JFrame {

    static JTextArea filePanel = new JTextArea();
在构造器中:

public Gui() {
    ...
    JTextArea filePanel =  new JTextArea();
这意味着您将在构造函数中声明的一个添加到框架中,但将在主框架中附加静态的一个。一点也不一样

移除静电干扰(因为这没有意义)

删除第二个声明,以初始化构造函数中的变量

public Gui() {
        ...
        filePanel =  new JTextArea();
并使用main中的变量实例访问它

frane.filePanel.append("Hii");


有关更多说明,请搜索Java中的阴影字段。这就是你正在做的。通过在不同的作用域中声明相同的变量来隐藏变量。

发布代码,而不是链接。@bradimus抢先告诉我:)不,不要发布代码。张贴一篇演示问题的文章。您有两个
JTextArea
对象,一个名为
FilePanel
,另一个名为
FilePanel
。去掉其中一个(最好是
FilePanel
,它不遵循命名约定)。@finlayreolofs:删除行
JTextArea FilePanel=new JTextArea()来自
Gui()
,因为此变量是构造函数的本地变量,并且不同于同名的其他
JTextArea
。这很有效!另外,谢谢你提供了关于我到底在做什么以及我应该如何做的详细信息:D
frane.filePanel.append("Hii");