【问题标题】:How to populate JTextArea with file from JList如何使用 JList 中的文件填充 JTextArea
【发布时间】:2012-05-17 14:50:32
【问题描述】:

我正在创建一个应用程序,该应用程序从选定的目录中获取 .java 和 .class 文件的列表并将它们放在 JList 中。我正在使用 Netbeans 7.1.2。

我已经按照我想要的方式在 JList 中显示了所有文件,但我似乎无法在 jTextArea 中打开选定的 .java 文件。

我需要从 JList 中获取文件以将其传递到 JTextArea 但它不起作用

     try
     {
         FileReader reader= new FileReader( jlist.getSelectedValue() );
         BufferedReader br = new BufferedReader( reader);
         textarea.read( br );
         br.close();
         textarea.requestFocus();               
     } 
     catch(Exception e2) {}

有人知道我哪里出错了吗?

【问题讨论】:

  • 如需尽快获得更好的帮助,请发帖SSCCE

标签: java swing file-io textarea jlist


【解决方案1】:

如果要将文件读入 JTextArea,则需要使用 read(...) 方法传入 BufferedFileReader 而不是 write(...) 方法。这对你来说应该是有意义的,因为你的目标是阅读,而不是写作。

【讨论】:

  • 我已经编辑了我的代码,这是你说的我必须做的吗?
  • 是的,但不要调用textarea.setText(""),否则你会删除你刚刚加载到JTextArea的内容:)
  • @newSpringer:试试看会发生什么。但正如其他人告诉你的那样,不要忽视例外情况,否则你会失明。
  • @newSpringer:是的,我知道你能做到!恭喜!!
【解决方案2】:
textarea.write( bw );

这可以编译吗? write 方法似乎是为了将 textarea 的内容写入文件,而不是相反。

此外,如果出现问题,请确保不要捕获异常并忽略它。异常跟踪对于了解问题所在非常有帮助。

【讨论】:

    【解决方案3】:

    如果您遇到问题,您应该显示/记录您的异常,而不是安静地吞下它们。您的代码可能会遇到一个与它相关联的有用异常的问题,但在您编写告诉您异常的代码之前您不会知道。

    你可以从这个开始:

    try
    {
         File file = (File)jlist.getSelectedValue();
         FileReader reader = new FileReader( file );
         textarea.read( br );
         br.close();
         textarea.requestFocus(); 
    }
    catch(Exception e)
    {
        JOptionPane.showMessageDialog(null, e.toString());
    }
    

    【讨论】:

    • 我让它在我的代码中打印出一个异常,但我没有将它添加到这个代码中,因为我只是想表明它在一个 try-catch 中。错误是因为读者正在尝试读取来自 jlist 而不是文件的对象...不要这样做,因为我已将 list 添加到 jlist
    • 您是否看到打印的错误消息?错误消息的确切文本是什么?可以复制粘贴吗?尝试将getSelectedValue() 的返回值转换为File(我在我的答案中显示了这一点。)
    • 修复了我的另一个错误,现在刚刚得到这个'java.io.FileNotFoundException:null(系统找不到指定的文件)'
    • 这可能意味着 jlist.getSelectedValue() 返回 null。确保在运行尝试打开所选项目的方法之前单击以选择列表中的某些内容。
    【解决方案4】:

    一旦您向 JList(一个可视组件)添加了一些东西,它就不再是一个对象列表。您只有一个索引为 0 到 n 的数组,您可以从中选择,但其中没有任何内容。您可以做的是创建一个文件数组(new File[])并将所有文件存储在其中,以便您可以随时访问它们。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多