我在使用java 2ME加载图像时遇到问题。我在位置驱动器“C:”中有一个图像文件“picture.png”。在那之后,我写了这样来显示这个位置的图像。
import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;
import java.io.*;
public class ImageMidlet extends MIDlet implements CommandListener{
private Display display;
private Command exitCommand;
private Command backCommand;
private Command okCommand;
private Form form;
private ImageItem imageItem;
private Image image;
public ImageMidlet(){
display = Display.getDisplay(this);
form=new Form("");
exitCommand = new Command("Exit", Command.EXIT, 1);
backCommand = new Command("Back", Command.BACK, 2);
okCommand = new Command("OK", Command.OK, 3);
try {
image=Image.createImage("/picture.png");
imageItem=new ImageItem(null,image,ImageItem.LAYOUT_NEWLINE_BEFORE,"");
}
catch(IOException ex){
}
form.append(imageItem);
form.addCommand(okCommand);
form.addCommand(exitCommand);
form.addCommand(backCommand);
form.setCommandListener(this);
display.setCurrent(form);
}
public void commandAction(Command c,Displayable d){
}
public void startApp() {
}
public void pauseApp() {
}
public void destroyApp(boolean unconditional) {
}
}
它向我显示了这个错误:
Unable to create MIDlet Test.ImageMidlet
java.lang.NullPointerException
at javax.microedition.lcdui.Form.append(Form.java:638)
at Test.ImageMidlet.<init>(ImageMidlet.java:39)
at java.lang.Class.runCustomCode(+0)
at com.sun.midp.midlet.MIDletState.createMIDlet(+34)
at com.sun.midp.midlet.Selector.run(Selector.java:151)
我开始学习开发,所以请指导这样做。
答案 0 :(得分:6)
Image.createImage(String name)将给定图像作为资源加载。资源加载了 Class.getResourceAsStream(name),它从类路径中查找资源,而不是从文件系统根目录中查找资源。
您应该将图像文件放在类路径中,这通常是最终的应用程序.jar文件。通常会在项目下创建名为 resources 或 res 的文件夹,放置图像。然后将此文件夹的内容复制到.jar文件中。在开发阶段,您应该能够使用命令行参数(Java SE中的 java -cp resources )或类似的IDE设置将资源文件夹附加到类路径。
如果您真的对从实际文件系统加载图像感兴趣,可以使用可选的FileConnection API(http://developers.sun.com/mobility/apis/articles/fileconnection/)。但该手机对该API的支持有限。对于静态图像,类路径是可行的方法。
答案 1 :(得分:4)
正如 msell 所说 - 您无法从您的计算机访问图像。确保您已将给定图像包含在midlet jar文件中。如果您尝试使用'/picture.png'访问它,那么它应该位于jar中的根目录。
答案 2 :(得分:2)
首先将图像放在默认包中。 我在默认包中放置了“My Network Places.png”。 然后创建名为“ImageItemExample”的MIDlet 然后复制到该MIDlet文件中的代码下面。
import java.io.*;
import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;
public class ImageItemExample extends MIDlet implements CommandListener{
private Display display;
private Command exit;
private Form form;
private ImageItem logo;
public ImageItemExample(){
form = new Form("Image Item");
exit = new Command("Exit", Command.EXIT, 0);
try{
logo = new ImageItem(null, Image.createImage("/My Network Places.png"),
ImageItem.LAYOUT_CENTER | ImageItem.LAYOUT_NEWLINE_BEFORE |
ImageItem.LAYOUT_NEWLINE_AFTER, "Roseindia");
form.append(logo);
}catch(IOException e){
form.append(new StringItem(null, "Roseindia: Image not available: "+ e));
}
}
public void startApp(){
display = Display.getDisplay(this);
form.addCommand(exit);
form.setCommandListener(this);
display.setCurrent(form);
}
public void pauseApp(){}
public void destroyApp(boolean unconditional){
notifyDestroyed();
}
public void commandAction(Command c, Displayable d){
String label = c.getLabel();
if(label.equals("Exit")){
destroyApp(true);
}
}
}
答案 3 :(得分:-2)
我猜是
image=Image.createImage("/picture.png");
抛出异常,阻止创建ImageItem类型的新对象,该对象将imageItem变量保留为null。这会给你空指针异常。
您的档案 Picture.png 而不是Pictur.png?
答案 4 :(得分:-2)
确认文件 picture.png 确实存在
取决于设备模拟器/ IDE,应该有一种方法来设置设备的“HOME”目录。在你的情况下,这将是“C:\”