在JavaJ2ME中加载图像

在JavaJ2ME中加载图像,java,java-me,midp,lcdui,Java,Java Me,Midp,Lcdui,我在用Java2ME加载图像时遇到问题。我有一个图像文件“picture.png”在位置驱动器“C:”中。在那之后,我写了这样的文章来展示这个位置的图片 import javax.microedition.midlet.*; import javax.microedition.lcdui.*; import java.io.*; public class ImageMidlet extends MIDlet implements CommandListener{ private Dis

我在用Java2ME加载图像时遇到问题。我有一个图像文件“picture.png”在位置驱动器“C:”中。在那之后,我写了这样的文章来展示这个位置的图片

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)
无法创建MIDlet Test.ImageMidlet
java.lang.NullPointerException
位于javax.microedition.lcdui.Form.append(Form.java:638)
在Test.ImageMidlet.(ImageMidlet.java:39)
位于java.lang.Class.runCustomCode(+0)
在com.sun.midp.midlet.midlestate.createMIDlet(+34)
位于com.sun.midp.midlet.Selector.run(Selector.java:151)
我正在开始学习发展,所以请指导我这样做。

我猜是这样的

image=Image.createImage("/picture.png");
引发异常,该异常阻止创建ImageItem类型的新对象,该对象将ImageItem变量保留为null。这将为您提供空指针异常

您的文件不是Picture.png而不是Picture.png吗?

请验证Picture.png文件是否确实存在

根据设备模拟器/IDE,应该有一种方法来设置设备的“主”目录。在您的例子中,这将是“C:\”

图像。createImage(字符串名称)将给定图像作为资源加载。资源是用Class.getResourceAsStream(name)加载的,它从类路径而不是从文件系统根目录中查找资源

您应该将映像文件放在类路径中,它通常是最终的application.jar文件。通常在项目下创建一个名为resources或res的文件夹,将图像放置在该文件夹中。然后将此文件夹的内容复制到.jar文件。在开发阶段,您应该能够使用命令行参数(JavaSE中的java-cp资源)或类似的IDE设置将资源文件夹附加到类路径


如果您真的对从实际文件系统加载映像感兴趣,可以使用可选的FileConnectionAPI()。不过,手机对该API的支持有限。对于静态图像,类路径是最好的选择。

正如msell所说的那样-您无法从计算机访问图像。确保在midlet jar文件中包含了给定的图像。如果您试图使用“/picture.png”访问它,那么它应该位于jar的根目录中。

首先将您的图像放入默认包中。 我已将“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);
}
}
}

正如你所说,我写错了字。但它无法加载此图像。它仍然显示这个错误。嗨,msell,你能指导我把图像文件放在类路径中,并告诉我如何得到它的示例代码吗。Regarsds,Sopolishi Jaanussim,我知道你们说的,但我不知道如何在jar中设置根目录的位置。你能引导我设置这个吗?谢谢,Sopolin你用什么工具来创建这个罐子?可能图像已经存在(一些工具将图像放入“res”文件夹,您需要使用“/res/picture.png”)。也许你只需要修正路径。根目录不在子文件夹中:)嗨,我正在使用NetBeansV6.7.1。尽快回复我谢谢,SopoliWith platform Java\u me\u platform\u SDK\u 3.0非常感谢Jaanussim,我理解。检查文件名是否正确。图像加载器区分大小写,即使文件名为“picture.Png”,您也会得到异常。。。