2010-07-28 1 views
0

Я разработал компонент для J2Me, а вот метод краски:Создание javax.microedition.lcdui.Image на приложение J2SE

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 изображения и извлекали ИНТ [] в InputStream, и создать новый образ на платформе J2SE, с этим объектом:

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); 
    } 
} 

Я попытался возразить, но комментировал линия исключает:

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) 

Как может закончиться эта ошибка?

Thanks,
Adam.

ответ

0

Ну,

Это был очень долгий процесс погружения в источниках J2ME MIDP и CLDC, а также использование пакета под названием MicroEmulator, здесь какой-то код, чтобы получить кого-то еще начал:

запускает эмулятор, который затем включает некоторые функции J2Me.

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"); 
    } 
} 

Далее мы имеем несколько других хороших объектов для работы с:

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); 
    } 
} 

и это изюминка о том, как сделать это.

Adam.