java - 如何获取存储在数据库中的图像路径并将其设置为按钮

标签 java database swing imageicon

我有一个 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") 返回了无效的文件路径。您可以轻松检查:

//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 组件。

关于java - 如何获取存储在数据库中的图像路径并将其设置为按钮,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21337514/

相关文章:

database - ER 图中的 mysql workbench 列图标是什么意思?

c# - 尽管 CanUserSortColumns ="true",但使用 ItemsSource 填充的 DataGrid 无法排序

java - JPanel 中没有应用颜色?

独立类的 Java ActionListener

java - java(client-server)中如何使用wireshark检查与SSL sockets的连接等疑惑

JAVA循环并为条件内的每个值生成输出

java - 忽略警告 :unchecked conversion in java 的后果是什么

MySQL - 为此分层模型选择数据的最佳方法?

java - 如何制作像 JOptionPane.showMessageDialog(xxx ,"xxx") 这样的函数?

Java 图像编辑填充区域不起作用