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