2013-02-18 110 views
1

我已经在Java中编写了一个applet,作为我的编程类的一部分,它需要一个人的生日,并找到他们出生的那一周的哪一天。根据作业规格,我们也将这个小程序放在我们的Amazon EC2虚拟服务器上。Java Swing图像不显示?

现在,当从JTable中选择人员时,程序会将其信息以及位于JTable旁边的图像文件的路径放在其信息旁边。因此,例如,您可以选择组成:

| John Doe | 17 | 02 | 2013 | /images/John.jpg |

当我在我的本地机器上运行这个时,一切都按预期工作 - 计算日期并显示图像。然而,当我把它放在我的服务器上,两种情况之一发生:

  1. 如果我把“显示日期”代码“显示图片”代码之前,然后当我按下“计算”按钮,只文字显示和图像不显示。
  2. 如果我把“显示图像”代码放在“显示日期”代码之前,当我按下“计算”按钮时没有任何反应。

这里可能会发生什么情况?我的图片仍然处于“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] + "."); 
    } 
} 
+1

*“这种奇怪行为的任何明显的原因?”* - 您的代码有问题。但是,由于你没有看到适合分享这一点,所以可以猜测这门课程,我宁愿不浪费你的时间前后推进课程。 – MadProgrammer 2013-02-18 01:52:12

+0

附加到原帖是我觉得与问题最相关的代码(即实际处理计算的代码)。如果你需要别的东西,只需告诉我。 – user41419 2013-02-18 01:54:28

+1

请修改您的问题以包含展示您描述的问题的[sscce](http://sscce.org/)。 – trashgod 2013-02-18 02:05:46

回答

2

我看到的第一个问题是这样的....

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))); 
+0

BufferedImage代码完美运行!我从来不会想到我所做的只是为本地文件工作,并且网络路径文件有一个完全不同的过程。 (我对Swing很新奇!)非常感谢。 – user41419 2013-02-18 02:14:27

+0

恕我直言 - 小程序是背后的痛苦。我知道你别无选择,但他们对于教学来说是一个糟糕的选择 - 恕我直言 – MadProgrammer 2013-02-18 02:15:48