首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在J2Se应用程序上创建javax.microedition.lcdui.Image

在J2Se应用程序上创建javax.microedition.lcdui.Image
EN

Stack Overflow用户
提问于 2010-07-29 01:51:01
回答 1查看 916关注 0票数 0

我已经为J2Me设计了一个组件,下面是paint方法:

代码语言:javascript
复制
import javax.microedition.lcdui.Graphics;  
import javax.microedition.lcdui.Image;  
class Component {
...
public void paint(Graphics g) {
    if (background != null)
        g.drawImage(image, bounds.getLocation().x, bounds.getLocation().y, 0);
}
...
}

我想在J2Se应用程序上绘制这个组件,我尝试将该组件绘制到J2Me图像上,并将int[]提取到InputStream中,然后使用以下对象在J2Se平台上创建一个新图像:

代码语言:javascript
复制
public class ComponentStreamer {
    private Component component;
    private Image j2Me_Image;

    public void setComponent(Component component) {
        this.component = component;
    }

    public InputStream getInputStream() throws IOException {
        if(component==null)
            return null;
        //THIS LINE THROWS THE EXCEPTION
        j2Me_Image=Image.createImage(component.getSize().width, component.getSize().height); 
        component.paint(j2Me_Image.getGraphics());
            return getImageInputStream(j2Me_Image);
    }
}

我已经尝试过这个对象,但是注释行抛出了一个异常:

代码语言:javascript
复制
Exception in thread "AWT-EventQueue-0" java.lang.UnsatisfiedLinkError: javax.microedition.lcdui.ImmutableImage.decodeImage([BII)V
    at javax.microedition.lcdui.ImmutableImage.decodeImage(Native Method)
    at javax.microedition.lcdui.ImmutableImage.getImageFromStream(Image.java:999)
    at javax.microedition.lcdui.ImmutableImage.<init>(Image.java:955)
    at javax.microedition.lcdui.Image.createImage(Image.java:554)

如何克服这个错误?

谢谢,

亚当。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-09-01 14:49:22

井,

这是一个非常漫长的过程,深入研究J2Me MIDP和CLDC的源代码,并使用一个名为微仿真器的包,下面是一些代码来帮助其他人入门:

这将启动一个仿真器,该仿真器随后启用一些J2Me特性。

代码语言:javascript
复制
    private void setUpEmulator() {
    try {
        // overrideJ2MeImagePackageLock();
        Headless app = new Headless();
        DeviceEntry defaultDevice = new DeviceEntry("Default device", null, DeviceImpl.DEFAULT_LOCATION, true, false);
        Field field = app.getClass().getDeclaredField("emulator");
        field.setAccessible(true);
        Common emulator = (Common) field.get(app);
        emulator.initParams(new ArrayList<String>(), defaultDevice, J2SEDevice.class);
    } catch (Exception e) {
        e.printStackTrace();
        System.out.println("Un-handled Exception");
    }
}

接下来,我们还有其他几个很好的对象可以使用:

代码语言:javascript
复制
    public class J2MeImageLayer extends ScalableLayer {
    private static final long serialVersionUID = -4606125807092612043L;

    public J2MeImageLayer() {
        componentViewer.super();
    }
    @Override
    public void repaint() {
        J2SEMutableImage mutableImage = new J2SEMutableImage(page.getSize().width, page.getSize().height);
        page.paint(mutableImage.getGraphics());
        Graphics g = getImage().getGraphics();
        g.drawImage(mutableImage.getImage(), 0, 0, DCP_Simulator.this);
    }
    public void addComponent(Component component) {
        page.add(component);
    }
    public void setComponent(final Component component) {
        page.removeAllElements();
        final Container componentParent;
        if ((componentParent = component.getParent()) != null)
            component.setRemovedAction(new interfaces.Action() {
                @Override
                public void action() {
                    componentParent.add(component);
                }
            });
        page.add(component);
    }
}

这是关于如何做到这一点的亮点。

亚当。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3355821

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档