Похоже, .TIF
не поддерживается ImageIO
.Посмотрите на formats
, поддерживаемый ImageIO
с помощью ImageIO.getReaderFormatNames()
, когда я сделал это, я получил вывод:
C:\Mine\JAVA\J2SE\classes>java TestBorder
jpg
BMP
bmp
JPG
jpeg
wbmp
png
JPEG
PNG
WBMP
GIF
gif
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at javax.swing.ImageIcon.<init>(ImageIcon.java:228)
at TestBorder.createAndDisplayGUI(TestBorder.java:34)
at TestBorder.access$100(TestBorder.java:6)
at TestBorder$1.run(TestBorder.java:55)
at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:251)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:705)
at java.awt.EventQueue.access$000(EventQueue.java:101)
at java.awt.EventQueue$3.run(EventQueue.java:666)
at java.awt.EventQueue$3.run(EventQueue.java:664)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:675)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:211)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:128)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:117)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:113)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:105)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:90)
И вот эта программа, на которой я пробовал:
import java.awt.*;
import java.awt.image.BufferedImage;
import javax.swing.*;
import javax.imageio.ImageIO;
public class TestBorder extends JPanel
{
private static TestBorder testBorder;
public TestBorder()
{
}
private static void createAndDisplayGUI()
{
JFrame frame = new JFrame("FRAME");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLocationByPlatform(true);
testBorder.setBackground(Color.BLUE);
java.net.URL url = testBorder.getClass().getResource("/image/MARBLES.TIF");
BufferedImage image = null;
try
{
image = ImageIO.read(url);
String[] formatNames = ImageIO.getReaderFormatNames();
for (String s: formatNames)
System.out.println(s);
}
catch(Exception e)
{
e.printStackTrace();
}
ImageIcon imageIcon = new ImageIcon(image);
JLabel label = new JLabel(imageIcon);
testBorder.add(label);
frame.add(testBorder, BorderLayout.CENTER);
frame.pack();
frame.setVisible(true);
}
public Dimension getPreferredSize()
{
return (new Dimension(300, 300));
}
public static void main(String... args)
{
Runnable runnable = new Runnable()
{
public void run()
{
testBorder = new TestBorder();
createAndDisplayGUI();
}
};
SwingUtilities.invokeLater(runnable);
}
}
Вот изображение, которое я использую: MARBLES.TIF , нажмите MARBLES.TIF по этой ссылке.
Более того, посмотрите начто Java Docs должен сказать для этого.Надеюсь, вы сможете найти там что-нибудь полезное.