След: Развертывание
Урок: Выполнение Больше С Java Богатые Интернет-приложения
Раздел: API JNLP
Доступ к Клиенту Используя API JNLP
Домашняя страница > Развертывание > Выполнение Больше С Java Богатые Интернет-приложения

Доступ к Клиенту Используя API JNLP

Когда запущено при использовании Протокола Запуска Сети Java (JNLP), богатые Интернет-приложения (RIA) могут получить доступ к клиенту с разрешением пользователя. Полагайте, что пример апплета Текстового редактора понимает, как использовать API JNLP базируемые службы. У Текстового редактора есть текстовая область, и кнопки, маркированные Открытый, Сохраните, и SaveAs. Текстовый редактор может использоваться, чтобы открыть существующий текстовый файл, отредактировать его, и сохранить его назад к диску.

Апплет Текстового редактора показывают затем.


Отметьте:  

Если Вы не видите, что апплет работает, Вы должны установить, по крайней мере, Java Комплект разработчика SE (JDK) 6 обновлений 10 выпусков.



Отметьте:  

Если Вы не видите, что пример работает, Вы, возможно, должны были бы включить интерпретатору JavaScript в своем браузере так, чтобы сценарий Инструментария Развертывания мог функционировать должным образом.


TextEditor и TextEditorApplet классы размечают пользовательский интерфейс и выводят на экран его как апплет. FileHandler class содержит базовую функциональность относительно использования API JNLP базируемые службы.

Помните, методы, описанные в этой теме, применяются к Сети Java, Запускают приложения также.

Чтобы использовать службу JNLP, сначала получите ссылку на службу. initialize метод FileHandler class получает ссылки на службы JNLP как показано в следующем фрагменте кода:

private static synchronized void initialize() {
    ...
    try {
        fos = (FileOpenService)
            ServiceManager.lookup("javax.jnlp.FileOpenService");
        fss = (FileSaveService)
            ServiceManager.lookup("javax.jnlp.FileSaveService");
    } catch (UnavailableServiceException e) {
        ...
    }
}

После того, как у Вас есть ссылка на необходимые службы, вызовите методы на службу, чтобы выполнить необходимые операции. open метод FileHandler class вызывает openFileDialog метод FileOpenService class, чтобы вывести на экран селектора файла. open метод возвращает содержание выбранного файла.

public static String open() {
    initialize();
    try {
        fc = fos.openFileDialog(null, null);
        return readFromFile(fc);
    } catch (IOException ioe) {
        ioe.printStackTrace(System.out);
        return null;
    }
}

Точно так же save и saveAs методы FileHandler class вызывает соответствующие методы FileSaveService class, чтобы позволить пользователю выбрать имя файла и сохранить содержание на диск текстовой области.

public static void saveAs(String txt) {
    initialize();
    try {
        if (fc == null) {
            // If not already saved.
            // Save-as is like save
            save(txt);
        } else {
            fc = fss.saveAsFileDialog(null, null,
                                         fc);
            save(txt);
        }
    } catch (IOException ioe) {
        ioe.printStackTrace(System.out);
    }
}

Во времени выполнения, когда RIA пытается открыть или сохранить файл, пользователи видят, что диалоговое окно безопасности спрашивает их, если они хотят позволить действие. Работа продолжится, только если пользователи позволяют RIA получать доступ к своей среде.

Полный источник FileHandler class показывают затем. Можно также видеть исходный код для полного текстового редактора, призванного WebPad sample каталог в Вашей установке JDK (your jdk path/sample/jnlp/webpad). WebPad делает широкое применение API JNLP.


// add javaws.jar to the classpath during compilation 
import javax.jnlp.FileOpenService;
import javax.jnlp.FileSaveService;
import javax.jnlp.FileContents;
import javax.jnlp.ServiceManager;
import javax.jnlp.UnavailableServiceException;
import java.io.*;

public class FileHandler {

    static private FileOpenService fos = null;
    static private FileSaveService fss = null;
    static private FileContents fc = null;

    // retrieves a reference to the JNLP services
    private static synchronized void initialize() {
        if (fss != null) {
            return;
        }
        try {
            fos = (FileOpenService) ServiceManager.lookup("javax.jnlp.FileOpenService");
            fss = (FileSaveService) ServiceManager.lookup("javax.jnlp.FileSaveService");
        } catch (UnavailableServiceException e) {
            fos = null;
            fss = null;
        }
    }

    // displays open file dialog and reads selected file using FileOpenService
    public static String open() {
        initialize();
        try {
            fc = fos.openFileDialog(null, null);
            return readFromFile(fc);
        } catch (IOException ioe) {
            ioe.printStackTrace(System.out);
            return null;
        }
    }

    // displays saveFileDialog and saves file using FileSaveService
    public static void save(String txt) {
        initialize();
        try {
            // Show save dialog if no name is already given
            if (fc == null) {
                fc = fss.saveFileDialog(null, null,
                        new ByteArrayInputStream(txt.getBytes()), null);
                // file saved, done
                return;
            }
            // use this only when filename is known
            if (fc != null) {
                writeToFile(txt, fc);
            }
        } catch (IOException ioe) {
            ioe.printStackTrace(System.out);
        }
    }

    // displays saveAsFileDialog and saves file using FileSaveService
    public static void saveAs(String txt) {
        initialize();
        try {
            if (fc == null) {
                // If not already saved. Save-as is like save
                save(txt);
            } else {
                fc = fss.saveAsFileDialog(null, null, fc);
                save(txt);
            }
        } catch (IOException ioe) {
            ioe.printStackTrace(System.out);
        }
    }

    private static void writeToFile(String txt, FileContents fc) throws IOException {
        int sizeNeeded = txt.length() * 2;
        if (sizeNeeded > fc.getMaxLength()) {
            fc.setMaxLength(sizeNeeded);
        }
        BufferedWriter os = new BufferedWriter(new OutputStreamWriter(fc.getOutputStream(true)));
        os.write(txt);
        os.close();
    }

    private static String readFromFile(FileContents fc) throws IOException {
        if (fc == null) {
            return null;
        }
        BufferedReader br = new BufferedReader(new InputStreamReader(fc.getInputStream()));
        StringBuffer sb = new StringBuffer((int) fc.getLength());
        String line = br.readLine();
        while (line != null) {
            sb.append(line);
            sb.append("\n");
            line = br.readLine();
        }
        br.close();
        return sb.toString();
    }
}

Отметьте: скомпилировать код Java, у которого есть ссылка на классы в javax.jnlp пакет, включать <your JDK path>/jre/lib/javaws.jar в Вашем пути к классу. Во времени выполнения программное обеспечение среды выполнения Java автоматически делает эти классы доступными для RIA.

Загрузите исходный код для примера Апплета Текстового редактора, чтобы экспериментировать далее.


Проблемы с примерами? Попытайтесь Компилировать и Выполнить Примеры: FAQ.
Жалобы? Поздравление? Предложения? Дайте нам свою обратную связь.

Предыдущая страница: API JNLP
Следующая страница: Cookie



Spec-Zone.ru - all specs in one place