Join Now
Quality Rating:
  • Currently 0.0 / 5
(0.0 / 5 - 0 votes cast)
Expertise Level:
  • Currently 0.0 / 5
(0.0 / 5 - 0 votes cast)

This page was last modified 22:45, 19 May 2008.

CS000946 - Using eSWT FileDialog in Java ME

From Forum Nokia Wiki


ID CS000946 Creation date May 14, 2008
Platform S60 3rd Edition, FP2 Tested on devices S60 3rd Ed. FP2 SDK
Category Java Subcategory eSWT, UI


Keywords (APIs, classes, methods, functions): eSWT, FileDialog

Overview

This code snippet demonstrates how to use eSWT's FileDialog class in Java ME. A FileDialog can be opened and when a file is selected, its size is shown on the screen. The following section contains the complete code for compiling and running the example application.

Source code

import javax.microedition.midlet.*;
import org.eclipse.ercp.swt.mobile.Command;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.*;
import org.eclipse.swt.widgets.*;
import org.eclipse.swt.layout.FillLayout;
import javax.microedition.io.file.FileConnection;
import javax.microedition.io.Connector;
import java.io.IOException;
 
public class FileDialogMIDlet extends MIDlet implements Runnable, SelectionListener {
    private Thread UIThread;
    private Display display;
    private Shell formShell;
    private boolean exiting = false;
    private Command fileCommand;
    private Command exitCommand;
    private Text text;
    private String textString = "FileDialogMIDlet";
 
    public void startApp() {
        // Create the eSWT UI thread. 
        if(UIThread == null) {
            UIThread = new Thread(this);
            UIThread.start();
        }
    }
 
    public void pauseApp() {
    }
 
    public void destroyApp(boolean unconditional) {
        // Make the event loop exit in the eSWT UI thread.
        exitEventLoop();
        // Wait for the eSWT UI thread to die. 
        try {
            UIThread.join();
        } catch(InterruptedException e) {
        }
    }
 
    void exitEventLoop() {
        exiting = true;
        Display.getDefault().wake();
    }
 
    // The eSWT UI Thread. 
    public void run() {
        display = new Display();
        FillLayout fillLayout = new FillLayout();
        formShell = new Shell(display);
        formShell.setLayout(fillLayout);
        formShell.open();
        Composite form = new Composite(formShell, SWT.NONE);
        form.setLayout(fillLayout);
        text = new Text(form, SWT.READ_ONLY | SWT.WRAP);
        text.setText(textString);
        fileCommand = new Command(formShell, Command.SELECT, 0);
        fileCommand.setText("Open FileDialog");
        fileCommand.addSelectionListener(this);
        exitCommand = new Command(formShell, Command.EXIT, 0);
        exitCommand.setText("Exit");
        exitCommand.addSelectionListener(this);
        formShell.redraw();
 
        // Execute the eSWT event loop. 
        while(!exiting) {
            if(!display.readAndDispatch()) {
                display.sleep();
            }
        }
 
        // Clean up and destroy the MIDlet.
        display.dispose();
        notifyDestroyed();
    }
 
    public void widgetDefaultSelected(SelectionEvent e) {
    }
 
    public void widgetSelected(SelectionEvent e) {
        if (e.widget.equals(fileCommand)) {
            openFileDialog();
        }
        if (e.widget.equals(exitCommand)) {
            // Exit command selected, exit the event loop. 
            exitEventLoop();        
        }
    }
    
    public void openFileDialog() {
        FileDialog fDialog = new FileDialog(formShell);
        fDialog.open();
        String filterPath = fDialog.getFilterPath();
        String temp = filterPath.replace('\\', '/'); // '\‘ characters are replaced with '/'
        filterPath = temp;
        String fileName = fDialog.getFileName();
        String path = "file:///" + filterPath + fileName;
        // path is for example: file:///C:/Data/Images/image.png, this can be used as file    
        // URL for FileConnection
        if (!path.equals("file:///")) { 
            // Path equals "file:///", if file dialog is canceled.
            try {
                FileConnection fc = (FileConnection) Connector.open(path, Connector.READ);
                if (!fc.isDirectory()) {
                    textString = "File size: " + fc.fileSize() + " bytes";
                    text.setText(textString);            
                }
            } catch (IOException ioe) { 
                // Thrown if an I/O error occurs or if the method is invoked on a directory.
                // Note: It is not possible to select a directory in FileDialog.
                textString = "IOException: " + ioe.getMessage();
                text.setText(textString);
            }
            catch (SecurityException se) { 
                // Thrown if the security of the application does not have read access for
                // the file.
                textString = "SecurityException: " + se.getMessage();
                text.setText(textString);
            }
            formShell.redraw();        
        }
    }
}

Postconditions

When a FileDialog is opened and a file is selected in it, the file size is shown on the screen.

See also

Related Discussions
Thread Thread Starter Forum Replies Last Post
error in running emulator SDK (2ed 3fp) nick_santa83 Symbian Tools & SDKs 3 2007-11-26 05:36
Personal Java and J2ME zivgr PersonalJava 1 2003-05-26 15:39
Error in eclipse + Nokia developers suite 2.2 mgyorffy Mobile Java Tools & SDKs 0 2005-01-20 16:36
Java PC - Mobile Bluetooth Connection GattusoMatrazzi Mobile Java Networking & Messaging & Security 1 2008-03-12 05:47
J2ME emulator WYSINAWYG Mobile Java Tools & SDKs 1 2003-11-26 01:54
 
Powered by MediaWiki
     
     RDF Facets:
     
     
     qfnZtopicQUqfnTopicZeswtQ
     qfnZtypeQUqfnTypeZCommunityContentQ
     qfnZtypeQUqfnTypeZWebpageQ
     qfnZtypeQUqfnTypeZWikiContentQ
     qmarsZlanguageQUxhttpE3aE2fE2fswE2enokiaE2ecomE2flanguageE2d1E2fenX