【问题标题】:how to get the imagepath stored in database and set into a button如何获取存储在数据库中的图像路径并设置为按钮
【发布时间】:2014-01-24 16:22:54
【问题描述】:

我有一个带有 texfields 和按钮的 GUI。如果我单击下一个按钮,光标应该在数据库中导航并将行值设置到我的文本字段中,并将路径放入按钮中以创建图像图标。但它给了我这个错误。

代码块:

if (event.getSource() == next) {
    try {   
        if (rs.next()) {    
            lastnameT.setText(rs.getString("lname"));
            firstnameT.setText(rs.getString("fname"));
            middlenameT.setText(rs.getString("mname"));
            aliasT.setText(rs.getString("alias"));
            sexT.setSelectedItem(rs.getString("sex"));
            ageT.setText(rs.getString("age"));
            civilstatusT.setSelectedItem(rs.getString("civilstatus"));
            addressT.setText(rs.getString("address"));
            religionT.setSelectedItem(rs.getString("religion"));
            monthT.setSelectedItem(rs.getString("m"));
            dayT.setSelectedItem(rs.getString("d"));
            yearT.setSelectedItem(rs.getString("y"));
            eaT.setSelectedItem(rs.getString("EA"));
            weightT.setText(rs.getString("weight"));;
            heightT.setText(rs.getString("height"));
            hairT.setSelectedItem(rs.getString("hair"));
            hairColorT.setSelectedItem(rs.getString("haircolor"));
            colorEyesT.setSelectedItem(rs.getString("colorofeyes"));
            complexionT.setSelectedItem(rs.getString("complexion"));
            gangT.setText(rs.getString("gang"));
            marksT.setText(rs.getString("marks"));
            preparedbyT.setText(rs.getString("preparedBy"));
            verifiedT.setText(rs.getString("verifiedBy"));

            //btnNewButton.putClientProperty(rs.getString("image"),rs.getString("image"));
            btnNewButton.setIcon(new ImageIcon(rs.getString("image")));
            //  save.setIcon(new ImageIcon(file.getPath()));
        }
        else {
            JOptionPane.showMessageDialog(null, "No more records");
        }
    }
    catch (Exception e) {
        JOptionPane.showMessageDialog(null,"Sa catch bumagsak");
        System.out.print(e);
    }
}

错误:

Uncaught error fetching image:
java.lang.NullPointerException
    at java.io.FileInputStream.<init>(Unknown Source)
    at java.io.FileInputStream.<init>(Unknown Source)
    at sun.awt.image.FileImageSource.getDecoder(Unknown Source)
    at sun.awt.image.InputStreamImageSource.doFetch(Unknown Source)
    at sun.awt.image.ImageFetcher.fetchloop(Unknown Source)
    at sun.awt.image.ImageFetcher.run(Unknown Source)

【问题讨论】:

  • rs.getString("image") 的路径是什么?

标签: java database swing imageicon


【解决方案1】:

似乎rs.getString("image") 正在返回一个无效的文件路径。您可以轻松检查:

//btnNewButton.setIcon(new ImageIcon(rs.getString("image")));
System.out.println(rs.getString("image"));

一些提示

数据库调用是耗时的任务,可能会阻塞 Event Dispatch Thread(又名 EDT),导致 GUI 无响应。 EDT 是一个单一且特殊的线程,Swing 组件在其中创建和更新。为避免阻塞此线程,请考虑使用SwingWorker 在后台线程中执行数据库调用并更新 EDT 中的 Swing 组件。在Concurrency in Swing trail 中查看更多信息。

我建议您查看this answer 中公开的提示。总结:

  • 将数据包装在域类中。
  • 使用 SwingWorker 在后台线程中执行数据库调用并更新 EDT 中的 Swing 组件。

【讨论】:

    猜你喜欢
    • 2011-01-14
    • 2020-12-09
    • 2013-04-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多