【问题标题】:Open gallery and display selected picture back Codename One打开图库并显示选中的图片 代号一
【发布时间】:2020-12-14 06:12:33
【问题描述】:

IDE:

  • 日食
  • 桌面 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() {
    }
}

【问题讨论】:

  • 解决了第一部分。我可以使用按钮,并且能够将文件路径写入原始屏幕。我如何显示我选择的图像?
  • 图像图像 = URLImage.createImage((String)e.getSource());嗨。添加(图像);

标签: codenameone


【解决方案1】:

您似乎有几个问题。第一个是您应该在安装 JDK 时解决的首选项问题:

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

来自Java: java.util.Preferences Failing

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

查看this article 以跟踪设计器工具问题。

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

【讨论】:

  • 感谢@Shai 的回答。以管理员身份运行有助于解决第一个错误。我也能够在主目录中找到designer_1.jar 和guibuilder_1.jar,所以我不确定是什么问题。目前,我有两个困境:- 每当我运行我的应用程序时都会收到 UTFDataFormatException,其次如何单击相机中的照片并将其显示在屏幕上?
  • 我回答了你的另一个问题。这个异常很严重......您的安装似乎严重损坏了一些东西
  • @ShaiAlmog 请注意,这个人在“字节 64 附近”遇到了问题,就像另一个人和我一样。我创建了几个项目,所有项目都报告相同的位置。该文件非空,Form.transparencyTitle.padding 可以在异常发生之前读取。创建了一个新项目“Phoenix”,读取了@hasRaisedButtonBoolTitle.padding,然后在读取长度为16256 = 63 * 256 + 128 的字符串时再次抛出“字节64 附近的格式错误输入”。不同的theme.res,相同问题。没有使用设计师,这是一个新的自动创建的演示。
  • 转到代号一设置 -> 基本 -> 更新客户端库,然后查看此问题是否继续存在。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-02-03
  • 1970-01-01
  • 1970-01-01
  • 2018-01-09
相关资源
最近更新 更多