打开画廊并显示选定的图片返回Codename One

时间:2017-07-20 11:04:20

标签: codenameone

IDE: - Eclipse 桌面Windows 7 模拟器Nexus 5 设备

嘿伙计们。我想打开设备的图库并显示用户选择的图像。我创建一个按钮,ActionListener应该将我转移到设备的库中。但即使我省略了画廊部分的开口并且只是添加按钮,模拟器也会显示一个空白屏幕。此外,它在日志中提供以下异常: -

Jul 20, 2017 4:11:00 PM java.util.prefs.WindowsPreferences <init>
WARNING: Could not open/create prefs root node Software\JavaSoft\Prefs at root 0x80000002. Windows RegCreateKeyEx(...) returned error code 5.
java.io.UTFDataFormatException: malformed input around byte 64
 at java.io.DataInputStream.readUTF(Unknown Source)
 at java.io.DataInputStream.readUTF(Unknown Source)
 at com.codename1.ui.util.Resources.loadTheme(Resources.java:1270)
 at com.codename1.ui.util.Resources.openFileImpl(Resources.java:303)
 at com.codename1.ui.util.Resources.openFile(Resources.java:269)
 at com.codename1.ui.util.Resources.<init>(Resources.java:189)
 at com.codename1.ui.util.Resources.open(Resources.java:768)
 at com.codename1.ui.util.Resources.open(Resources.java:688)
 at com.codename1.impl.javase.JavaSEPort$4.run(JavaSEPort.java:1720)
 at com.codename1.ui.Display.processSerialCalls(Display.java:1056)
 at com.codename1.ui.Display.mainEDTLoop(Display.java:873)
 at com.codename1.ui.RunnableWrapper.run(RunnableWrapper.java:120)
 at com.codename1.impl.CodenameOneThread.run(CodenameOneThread.java:176)

以下是我在空的新裸骨项目上制作的主要java文件: -

package com.mycompany.myapp;
import com.codename1.ui.Display;
import com.codename1.ui.Form;
import com.codename1.ui.Image;
import com.codename1.ui.Button;
import com.codename1.ui.Dialog;
import com.codename1.ui.Label;
import com.codename1.ui.plaf.UIManager;
import com.codename1.ui.util.Resources;
import com.codename1.components.ImageViewer;
import com.codename1.io.Log;
import com.codename1.media.MediaManager;
import com.codename1.ui.Toolbar;
import com.codename1.ui.events.ActionEvent;
import com.codename1.ui.events.ActionListener;
import java.io.IOException;
/**
 * This file was generated by <a href="https://www.codenameone.com/">Codename One</a> for the purpose 
 * of building native mobile applications using Java.
 */
public class MyApplication {
    private Form current;
    private Resources theme;
    public void init(Object context) {
        theme = UIManager.initFirstTheme("/theme");
        // Enable Toolbar on all Forms by default
        Toolbar.setGlobalToolbar(true);
        // Pro only feature, uncomment if you have a pro subscription
        // Log.bindCrashProtection(true);
    }

    public void start() {
        if(current != null){
            current.show();
            return;
        }
        Form hi = new Form("Hi World");
        hi.addComponent(new Label("Hi World"));
        Button gallery = new Button("Browse");
       hi.add(gallery);
       gallery.addActionListener(new ActionListener<ActionEvent>() {
 @Override
 public void actionPerformed(ActionEvent evt) {
 // TODO Auto-generated method stub
 Display.getInstance().openGallery((e) -> {
            if(e != null && e.getSource() != null) {
//                String file = (String)e.getSource();
//                try {
//                Label path = new Label(file);
//                hi.add(path);
//                    
//                } catch(Exception err) {
//                    Log.e(err);
//                } 
            }
        }, Display.GALLERY_IMAGE);
 }
 });
    }
    public void stop() {
        current = Display.getInstance().getCurrent();
        if(current instanceof Dialog) {
            ((Dialog)current).dispose();
            current = Display.getInstance().getCurrent();
        }
    }

    public void destroy() {
    }
}

1 个答案:

答案 0 :(得分:2)

看来你有几个问题。第一个是您应该使用JDK安装修复的首选项问题:

  

解决问题解决方法是以管理员身份登录   并创建密钥HKEY_LOCAL_MACHINE \ Software \ JavaSoft \ Prefs

来自Java: java.util.Preferences Failing

接下来,您的资源文件似乎已损坏。很难分辨出那里出了什么问题......它的长度是0吗?

查看this article以了解设计师工具问题。

来自相机的大图像需要一些时间来处理某些设备。您可以捕获较小的图像(请参阅各种捕获方法),但我猜测您在添加到ui之后没有重新验证,并且错误地认为这很慢。