我有一个 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/