Java Swing图像不显示?

时间:2013-02-18 01:47:50

标签: java swing debugging

我已经用Java编写了一个小程序作为我的编程课程的一部分,该程序会占用一个人的生日,并找到他们出生的星期几。根据分配规范,我们也将此applet放在我们的Amazon EC2虚拟服务器上。

现在,当从JTable中选择此人时,程序将获取他们的信息以及位于JTable旁边的图像文件的路径。因此,例如,您可以选择包括:

  

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

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

  1. 如果我将“显示日期”代码放在“显示图像”代码之前,那么当我按下“计算”按钮时,只显示文本而图像不显示。
  2. 如果我将“显示图像”代码放在“显示日期”代码之前,则按“计算”按钮时没有任何反应。
  3. 这里可能会发生什么?我的图像仍在“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 个答案:

答案 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)));