java gui使用分割函数在文本区域中显示

java gui使用分割函数在文本区域中显示,java,swing,user-interface,frontend,Java,Swing,User Interface,Frontend,嗨,我试图在文本区域内使用拆分功能,这样它只会向用户显示某些信息,目前我试图使用GUI界面中常规编程中使用的典型方法,但我认为我没有正确实现它 private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) { // TODO add your handling code here: JFileChooser choo

嗨,我试图在文本区域内使用拆分功能,这样它只会向用户显示某些信息,目前我试图使用GUI界面中常规编程中使用的典型方法,但我认为我没有正确实现它

    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         
    // TODO add your handling code here:
    JFileChooser chooser = new JFileChooser();
        chooser.showOpenDialog(null);
        File f = chooser.getSelectedFile();
        String filename = f.getAbsolutePath();
    String st;
    String[] setdate = null;
    String[] submission = null;
    String[] title = null;
    String[] value = null;
    try 
    {
        FileReader reader = new FileReader (filename);
        BufferedReader br = new BufferedReader(reader);
        jTextArea1.read(br, null);
        br.close();
        jTextArea1.requestFocus();

    while ((st = br.readLine()) != null) {
        System.out.println(st); 
        if(st.contains("TITLE")) 
            title = st.split(":");
        if(st.contains("DATE SET"))
            setdate = st.split(":");                
        if(st.contains("SUBMISSION"))
            submission = st.split(":");
        if(st.contains("VALUE:"))
            value = st.split(":");
    }                  
    }
    catch (Exception e ) {
        JOptionPane.showMessageDialog( null, e);
    }
} 

当前,您打开了
缓冲阅读器
,用它读取一些内容,然后直接关闭它。然后,您希望使用刚才关闭的读取器再次阅读
br.readLine()

br.close()应在
最后
块中完成

try (FileReader reader = new FileReader(filename); BufferedReader br = new BufferedReader(reader)) {
    jTextArea1.read(br, null);
    jTextArea1.requestFocus();

    while ((st = br.readLine()) != null) {
        System.out.println(st);
        if (st.contains("TITLE"))
            title = st.split(":");
        if (st.contains("DATE SET"))
            setdate = st.split(":");
        if (st.contains("SUBMISSION"))
            submission = st.split(":");
        if (st.contains("VALUE:"))
            value = st.split(":");
    }
} catch (Exception e) {
    JOptionPane.showMessageDialog(null, e);
}
使用JTextArea的read(…)方法的要点是从文件中读取数据并将数据添加到文本区域

因此,在调用该方法之后,文件中的所有数据都已被读取

如果要在将数据添加到文本区域之前解析数据,则不应使用read(…)方法。相反,您只需从文件中读取每行数据,然后使用JTextArea的
append(…)
方法添加数据

if (st.contains("TITLE"))
    title = st.split(":");
另外,我不知道您的文件的格式是什么,但是您希望代码做什么。每次读取包含
标题的行时,都会创建一个新数组。我怀疑您应该创建数组来获取数据,然后使用
append(…)
方法将数据添加到文本区域


但是没有明确的要求,我们只是猜测。

你的实际问题是什么?好的,你分割了这个值,然后呢?你的错误还有一个完整的堆栈跟踪。把它包括在你的计划中question@Stultuske在JTextArea中显示它我认为finally块中的close文件不起作用为什么不呢?我调整了任何可能出现的范围问题,IOexception从未在相应的try语句的主体中抛出,我认为br仍然超出try块的范围Yup br.close after finally仍然是一个问题:/n那么您没有更新
BufferedReader br=null
甚至在第一次
之前,请尝试
。我现在将其更新为
try with resource
,从而消除了所有问题
jTextArea1.read(br, null);
if (st.contains("TITLE"))
    title = st.split(":");