我在使用 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)
我开始学习开发,请指导。
最佳答案
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 的支持是有限的。对于静态图像,类路径是必经之路。
关于java - 在 Java J2ME 中加载图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1332205/