Spec-Zone .ru
спецификации, руководства, описания, API
|
Когда запущено при использовании Протокола Запуска Сети Java (JNLP), богатые Интернет-приложения (RIA) могут получить доступ к клиенту с разрешением пользователя. Полагайте, что пример апплета Текстового редактора понимает, как использовать API JNLP базируемые службы. У Текстового редактора есть текстовая область, и кнопки, маркированные Открытый, Сохраните, и SaveAs. Текстовый редактор может использоваться, чтобы открыть существующий текстовый файл, отредактировать его, и сохранить его назад к диску.
Апплет Текстового редактора показывают затем.
Если Вы не видите, что апплет работает, Вы должны установить, по крайней мере,
Если Вы не видите, что пример работает, Вы, возможно, должны были бы включить интерпретатору 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
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(); } }
javax.jnlp
пакет, включать <your JDK path>/jre/lib/javaws.jar
в Вашем пути к классу. Во времени выполнения программное обеспечение среды выполнения Java автоматически делает эти классы доступными для RIA. Загрузите исходный код для примера Апплета Текстового редактора, чтобы экспериментировать далее.