我已经用Java编写了一个小程序作为我的编程课程的一部分,该程序会占用一个人的生日,并找到他们出生的星期几。根据分配规范,我们也将此applet放在我们的Amazon EC2虚拟服务器上。
现在,当从JTable中选择此人时,程序将获取他们的信息以及位于JTable旁边的图像文件的路径。因此,例如,您可以选择包括:
| John Doe 17 | 02 | 2013 | /images/John.jpg |
当我在本地计算机上运行时,一切都按预期工作 - 计算日期并显示图像。但是,当我把它放在我的服务器上时,会发生以下两种情况之一:
这里可能会发生什么?我的图像仍在“images / Name.jpg”路径中,我甚至尝试使用整个路径(“https://myUsername.course.ca/assignment/images/Name.jpg”)。都不行!这种奇怪的行为会有明显的原因吗?
/**
* Method that handles the user pressing the "Calculate" button
*/
private class btnCalculateHandler implements ActionListener {
public void actionPerformed(ActionEvent e) {
int result;
name = (String)table.getValueAt(table.getSelectedRow(), 0);
day = Integer.parseInt((String)table.getValueAt(table.getSelectedRow(), 1));
month = Integer.parseInt((String)table.getValueAt(table.getSelectedRow(), 2));
year = Integer.parseInt((String)table.getValueAt(table.getSelectedRow(), 3));
result = calculateDayOfWeek(day, month, year);
writeToFile();
ImageIcon imgPerson = new javax.swing.ImageIcon((String)table.getValueAt(table.getSelectedRow(), 4));
Image person = imgPerson.getImage();
Image personResized = person.getScaledInstance(75, 100, java.awt.Image.SCALE_SMOOTH);
ImageIcon imgPersonResized = new ImageIcon(personResized);
image.setIcon(imgPersonResized);
outputValue.setText(name + " was born on a " + days[result] + ".");
}
}
答案 0 :(得分:1)
我看到的第一个问题是......
ImageIcon imgPerson = new javax.swing.ImageIcon((String)table.getValueAt(table.getSelectedRow(), 4))
ImageIcon(String)
用于指定图像的文件名。这应该用于加载本地磁盘的映像,而不是网络路径。
如果相对于小程序加载图片,您可以使用Applet#getImage(URL, String)
向其传递Applet#getDocumentBase()
像getImage(getDocumentBase(), (String)table.getValueAt(table.getSelectedRow(), 4))
更好的选择是使用ImageIO
。这样做的主要原因是它不会使用后台线程来加载图像,如果出现问题会抛出IOException
,这样可以更容易地诊断任何问题......
像...一样的东西。
BufferedImage image = ImageIO.read(new URL(getDocumentBase(), (String)table.getValueAt(table.getSelectedRow(), 4)));