2017-07-20 2 views
2

IDE - Eclipse- Desktop-Windows 7 Simulator Nexus 5 GeräteGalerie öffnen und anzeigen ausgewählte Bild zurück Codename One

Hey guys. Ich möchte die Galerie des Geräts öffnen und das vom Benutzer ausgewählte Bild anzeigen. Ich mache einen Knopf und ein ActionListener sollte mich zur Galerie des Gerätes lenken. Aber der Simulator zeigt einen leeren Bildschirm, auch wenn ich das Öffnen des Galerieteils weglasse und nur den Knopf hinzufüge. Auch Sie gibt die folgende Ausnahme im Protokoll: -

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) 

Das Folgende ist meine Haupt-Java-Datei auf einen leeren neuen nackten Knochen Projekt gemacht: -

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() { 
    } 
} 
+0

Gelöst den ersten Teil. Ich kann den Knopf benutzen und kann den Dateipfad auf den ursprünglichen Bildschirm schreiben. Wie kann ich das Bild anzeigen, das ich ausgewählt habe? – Gurankas

+0

Image image = URLImage.createImage ((String) e.getSource()); \t \t \t \t \t \t \t hi.add (Bild); <- Gibt es einen effizienteren Weg, es zu tun? Es dauert einige Zeit, um hochgeladen zu werden – Gurankas

+0

Sie können die ImageIO-Klasse verwenden https://www.codenameone.com/javadoc/com/codename1/ui/util/ImageIO.html – Chen

Antwort

2

Es scheint, Sie haben einige Probleme. Die erste ist eine Vorliebe Frage, die Sie mit Ihrem JDK installieren beheben sollen:

Problemlösung Die Arbeit um melden Sie sich als Administrator und erstellen Sie das Schlüssel HKEY_LOCAL_MACHINE \ Software \ Javasoft \ Prefs

Von Java: java.util.Preferences Failing

Als nächstes scheint Ihre Ressource-Datei beschädigt ist. Es ist schwer zu sagen, was dort schief gelaufen ist ... Ist es 0 Länge?

Auschecken this article zum Verfolgen von Designer-Tool-Probleme.

Ein großes Bild von der Kamera nimmt auf einigen Geräten einige Zeit in Anspruch. Sie können ein kleineres Bild aufnehmen (siehe die verschiedenen Aufnahmemethoden), aber ich nehme an, dass Sie nach dem Hinzufügen zum ui nicht revalidiert haben und fälschlicherweise annehmen, dass dies langsam ist.

+0

Danke für die Antwort @Shai. Das Ausführen als Administrator half beim Lösen des ersten Fehlers. Ich konnte sowohl Designer_1.jar als auch Guibuilder_1.jar im Home-Verzeichnis finden, so dass ich mir nicht sicher bin, wo das Problem liegt. Momentan habe ich zwei Dilemnas: - Ich bekomme eine UTFDataFormatException, wenn ich meine App starte und zweitens Wie klicke ich ein Foto von der Kamera an und zeige es auf dem Bildschirm an? – Gurankas

+0

Ich beantwortete eine andere Frage, die Sie hatten. Diese Ausnahme ist ernst ... Etwas scheint ernsthaft mit Ihrer Installation gebrochen zu sein –

+0

@ShaiAlmog Beachten Sie, dass dieser Typ hatte ein Problem "um Byte 64", genau wie der andere und ich. Ich habe ein paar Projekte erstellt, die alle die gleiche Position haben. Die Datei ist nicht leer, 'Form.transparency' und' Title.padding' können gelesen werden, bevor die Ausnahme auftritt. Erstellt ein neues Projekt "Phoenix", '@ hasRaisedButtonBool' und' Title.padding' wurden gelesen, gefolgt von "missformed Eingabe um Byte 64" wieder geworfen beim Lesen einer Zeichenfolge mit der Länge 16256 = 63 * 256 + 128. Verschiedene 'Thema .res', dasselbe Problem. Kein Designer verwendet, es war eine frisch selbst erstellte Demo. – maaartinus