|
Spec-Zone .ru
спецификации, руководства, описания, API
|
Эта глава включает следующие темы:
BasicService СлужбаClipboardService СлужбаDownloadService СлужбаDownloadService2 СлужбаDownloadServiceListener СлужбаFileOpenService СлужбаFileSaveService СлужбаIntegrationService СлужбаPrintService СлужбаPersistenceService СлужбаFileContentsJNLPRandomAccessFileSingleInstanceService СлужбаExtendedService СлужбаAPI JNLP разрабатывается, чтобы обеспечить дополнительную информацию для приложения, которое иначе не было бы доступным использованием стандартного Java (ТМ) Платформа Standard Edition API. Следующие примеры кода показывают, как следующие службы могут использоваться: BasicService, ClipboardService, DownloadService, FileOpenService, FileSaveService, PrintService, и PersistenceService.
Общедоступные классы и интерфейсы в API JNLP включаются в файл jnlp.jar. Этот файл JAR должен быть включен в путь к классу, компилируя исходные файлы, которые используют API JNLP. Например на Windows:
javac -classpath .;jnlp.jar *.java
Файл jnlp.jar включается в Пакет Разработчиков JNLP.
BasicService Служба javax.jnlp.BasicService служба обеспечивает ряд методов для запросов и взаимодействия со средой, подобной тому, что AppletContext предусматривает Апплет Java.
Метод showURL использует API JNLP, чтобы направить браузер значения по умолчанию на платформе, чтобы показать данный URL. Метод возвращает true, если запрос успешно выполняется, иначе ложь.
import javax.jnlp.*;
...
// Method to show a URL
boolean showURL(URL url) {
try {
// Lookup the javax.jnlp.BasicService object
BasicService bs = (BasicService)ServiceManager.lookup("javax.jnlp.BasicService");
// Invoke the showDocument method
return bs.showDocument(url);
} catch(UnavailableServiceException ue) {
// Service is not supported
return false;
}
}
ClipboardService СлужбаСлужба javax.jnlp.ClipboardService обеспечивает методы для того, чтобы они получили доступ к совместно используемому буферу обмена в масштабе всей системы, даже для приложений, которые работают в ограниченной среде выполнения.
Веб-Запуск Java предупредит пользователя потенциальной угрозы безопасности разрешения недоверяемой потенциально конфиденциальной информации доступа приложения, сохраненной в буфере обмена, или перезаписи содержания, сохраненного в буфере обмена.
import javax.jnlp;
...
private ClipboardService cs;
try {
cs = (ClipboardService)ServiceManager.lookup
("javax.jnlp.ClipboardService");
} catch (UnavailableServiceException e) {
cs = null;
}
if (cs != null) {
// set the system clipboard contents to a string selection
StringSelection ss = new StringSelection("Java Web Start!");
cs.setContents(ss);
// get the contents of the system clipboard and print them
Transferable tr = cs.getContents();
if (tr.isDataFlavorSupported(DataFlavor.stringFlavor)) {
try {
String s = (String)tr.getTransferData(DataFlavor.stringFlavor);
System.out.println("Clipboard contents: " + s);
} catch (Exception e) {
e.printStackTrace();
}
}
}
DownloadService Служба javax.jnlp.DownloadService служба позволяет приложению управлять, как кэшируются его собственные ресурсы.
Служба позволяет приложению определять, какие из его ресурсов кэшируются, чтобы вынудить ресурсы кэшироваться, и удалить ресурсы из кэша.
import javax.jnlp.*;
...
DownloadService ds;
try {
ds = (DownloadService)ServiceManager.lookup("javax.jnlp.DownloadService");
} catch (UnavailableServiceException e) {
ds = null;
}
if (ds != null) {
try {
// determine if a particular resource is cached
URL url =
new URL("http://java.sun.com/products/javawebstart/lib/draw.jar");
boolean cached = ds.isResourceCached(url, "1.0");
// remove the resource from the cache
if (cached) {
ds.removeResource(url, "1.0");
}
// reload the resource into the cache
DownloadServiceListener dsl = ds.getDefaultProgressWindow();
ds.loadResource(url, "1.0", dsl);
} catch (Exception e) {
e.printStackTrace();
}
}
DownloadService2 Служба javax.jnlp.DownloadService2 служба, представленная в Java SE 6 обновлений 18 выпусков, обеспечивает следующие методы:
getCachedResources – Кэшируемые ресурсы списков, которые соответствуют данную версию, URL и тип ресурса.getUpdateAvailableResources – Проверки и ресурсы списков, для которых обновления доступны. Если приложение использует протокол загрузки версии, определите версию в DownloadService2.ResourceSpec. В противном случае определите нулевое значение для версии.Экземпляр DownloadService2.ResourceSpec class определяет детали о ресурсе, который будет проверен.
import javax.jnlp.*;
...
DownloadService2 service = (DownloadService2)
ServiceManager.lookup("javax.jnlp.DownloadService2");
// create a new instance of ResourceSpec. In this example:
// - resource is downloaded from a directory on http://foo.bar.com:8080
// - version is 2. [0-9]+
// - resource type is JAR
ResourceSpec spec = new ResourceSpec("http://foo.bar.com:8080/.*", 2.*, service.JAR)
// returns all cached resources that match the given ResourceSpec
ResourceSpec results[] = service.getCachedResources(spec);
// returns all resources for which an update is available on the
// server http://foo.bar.com:8080.
results = service.getUpdateAvailableResources(spec);
DownloadServiceListener Служба javax.jnlp.DownloadServiceListener служба обеспечивает методы, чтобы определить специализированный индикатор хода выполнения загрузки, который указывает на продвижение загрузки приложения. См. Реализацию Специализированной темы Индикатора хода выполнения Загрузки для получения дополнительной информации.
FileOpenService Служба javax.jnlp.FileOpenService служба обеспечивает методы для того, чтобы они импортировали файлы из локального диска, даже для приложений, которые работают в ограниченной среде выполнения.
Этот интерфейс разрабатывается, чтобы обеспечить то же самое отчасти доступа к диску к потенциально недоверяемым Развернутым сетью приложениям, которые Веб-разработчик имеет при использовании HTML. HTML-формы поддерживают включение файлов, выводя на экран открытое диалоговое окно файла.
import javax.jnlp.*;
...
FileOpenService fos;
try {
fos = (FileOpenService)ServiceManager.lookup("javax.jnlp.FileOpenService");
} catch (UnavailableServiceException e) {
fos = null;
}
if (fos != null) {
try {
// ask user to select a file through this service
FileContents fc = fos.openFileDialog(null, null);
// ask user to select multiple files through this service
FileContents[] fcs = fos.openMultiFileDialog(null, null);
} catch (Exception e) {
e.printStackTrace();
}
}
FileSaveService Служба javax.jnlp.FileSaveService служба обеспечивает методы для того, чтобы они экспортировали файлы в локальный диск, даже для приложений, которые работают в ограниченной среде выполнения.
Этот интерфейс разрабатывается, чтобы обеспечить тот же самый уровень доступа к диску к потенциально недоверяемым Развернутым сетью приложениям, что Веб-браузер предусматривает содержание, которое это выводит на экран. Большинство браузеров обеспечивает Сохранение Так... диалогового окна как часть их пользовательского интерфейса.
import javax.jnlp.*;
...
FileSaveService fss;
FileOpenService fos;
try {
fos = (FileOpenService)ServiceManager.lookup("javax.jnlp.FileOpenService");
fss = (FileSaveService)ServiceManager.lookup
("javax.jnlp.FileSaveService");
} catch (UnavailableServiceException e) {
fss = null;
fos = null;
}
if (fss != null && fos != null) {
try {
// get a file with FileOpenService
FileContents fc = fos.openFileDialog(null, null);
// one way to save a file
FileContents newfc = fss.saveFileDialog(null, null,
fc.getInputStream(), "newFileName.txt");
// another way to save a file
FileContents newfc2 = fss.saveAsFileDialog(null, null, fc);
} catch (Exception e) {
e.printStackTrace();
}
}
Также см. Используя FileContents.
IntegrationService Служба javax.jnlp.IntegrationService служба, представленная в Java SE 6 обновлений 18 выпусков, обеспечивает методы для программируемого управления ярлыками. При использовании этой службы приложение может выполнить следующие операции:
import javax.jnlp.*;
...
IntegrationService is = null;
try {
is = (IntegrationService) ServiceManager.lookup("javax.jnlp.IntegrationService");
} catch(UnavailableServiceException use){
...
}
// creates a desktop and system menu shortcut; returns true if the shortcuts
// were created successfully
boolean result = is.requestShortcut(true, true, null);
//removes all shortcuts for application
result = is.removeShortcuts();
// checks to see if there are shortcuts for the application
result = is.hasMenuShortcut() && is.hasDesktopShortcut());
// associates the application with the specified mime-type and file extensions
String mime = "x-application/aaa";
String [] exts = {"aaa", "abc"};
result = is.requestAssociation(mime, exts);
// checks if the application is associated with the specified mime-type and file extensions
result = is.hasAssociation(mime, exts);
// removes association between the application and the specified mime-type and file extensions
is.removeAssociation(mime, exts);
PrintService Служба javax.jnlp.PrintService служба обеспечивает методы для доступа к печати, даже для приложений, которые работают в ограниченной среде выполнения.
Используя эту службу, приложение может представить задание печати. Веб-Запуск Java тогда покажет этот запрос пользователю и, если принято, поставить запрос в очередь к принтеру.
В Java Сеть Запускается 5.0, можно теперь непосредственно использовать API Печати Java, и Веб-Запуск Java раскроется диалоговое окно безопасности то, чтобы просить, чтобы пользователь предоставил PrintPermission если приложение работает в песочнице. Нет никакой потребности использовать JNLP Печать API больше. У Вас может быть полный доступ к API Печати Java в любом приложении JNLP.
import javax.jnlp.*;
...
PrintService ps;
try {
ps = (PrintService)ServiceManager.lookup("javax.jnlp.PrintService");
} catch (UnavailableServiceException e) {
ps = null;
}
if (ps != null) {
try {
// get the default PageFormat
PageFormat pf = ps.getDefaultPage();
// ask the user to customize the PageFormat
PageFormat newPf = ps.showPageFormatDialog(pf);
// print the document with the PageFormat above
ps.print(new DocToPrint());
} catch (Exception e) {
e.printStackTrace();
}
}
// Code to construct the Printable Document
class DocToPrint implements Printable {
public int print(Graphics g, PageFormat pageformat, int PageIndex){
// code to generate what you want to print
}
}
PersistenceService Служба javax.jnlp.PersistenceService служба обеспечивает методы для того, чтобы они хранили данные локально на клиентской системе, даже для приложений, которые работают в ограниченной среде выполнения.
Служба разрабатывается, чтобы быть несколько подобной этому, которое механизм cookie обеспечивает для Основанных на HTML приложений. Cookie позволяют небольшому количеству данных быть сохраненным локально на клиентской системе. Теми данными может надежно управлять браузер и могут только быть получены страницами HTML, которые происходят из того же самого URL как страница, которая хранила данные.
import javax.jnlp.*;
...
PersistenceService ps;
BasicService bs;
try {
ps = (PersistenceService)ServiceManager.lookup("javax.jnlp.PersistenceService");
bs = (BasicService)ServiceManager.lookup("javax.jnlp.BasicService");
} catch (UnavailableServiceException e) {
ps = null;
bs = null;
}
if (ps != null && bs != null) {
try {
// find all the muffins for our URL
URL codebase = bs.getCodeBase();
String [] muffins = ps.getNames(url);
// get the attributes (tags) for each of these muffins.
// update the server's copy of the data if any muffins
// are dirty
int [] tags = new int[muffins.length];
URL [] muffinURLs = new URL[muffins.length];
for (int i = 0; i < muffins.length; i++) {
muffinURLs[i] = new URL(codebase.toString() + muffins[i]);
tags[i] = ps.getTag(muffinURLs[i]);
// update the server if anything is tagged DIRTY
if (tags[i] == PersistenceService.DIRTY) {
doUpdateServer(muffinURLs[i]);
}
}
// read in the contents of a muffin and then delete it
FileContents fc = ps.get(muffinURLs[0]);
long maxsize = fc.getMaxLength();
byte [] buf = new byte[fc.getLength()];
InputStream is = fc.getInputStream();
long pos = 0;
while((pos = is.read(buf, pos, buf.length - pos)) > 0) {
// just loop
}
is.close();
ps.delete(muffinURLs[0]);
// re-create the muffin and repopulate its data
ps.create(muffinURLs[0], maxsize);
fc = ps.get(muffinURLs[0]);
// don't append
OutputStream os = fc.getOutputStream(false);
os.write(buf);
os.close();
} catch (Exception e) {
e.printStackTrace();
}
}
void doUpdateServer(URL url) {
// update the server's copy of the persistent data
// represented by the given URL
...
ps.setTag(url, PersistenceService.CACHED);
}
FileContentsОбъекты javax.jnlp.FileContents инкапсулируют имя и содержание файла. Объект этого class используется FileOpenService, FileSaveService и PersistenceService. Вот пример того, как экземпляр FileContents может использоваться, чтобы читать из и записать в файл:
import javax.jnlp.*;
...
FileOpenService fos;
//Initialize fos (see Using the FileOpenService Service example)
...
if (fos != null) {
try {
// get a FileContents object to work with from the
// FileOpenService
FileContents fc = fos.openFileDialog(null, null);
// get the InputStream from the file and read a few bytes
byte [] buf = new byte[fc.getLength()];
InputStream is = fc.getInputStream();
int pos = 0;
while ((pos = is.read(buf, pos, buf.length - pos)) > 0) {
// just loop
}
is.close();
// get the OutputStream and write the file back out
if (fc.canWrite()) {
// don't append
OutputStream os = fc.getOutputStream(false);
os.write(buf);
}
} catch (Exception e) {
e.printStackTrace();
}
}
JNLPRandomAccessFileЭкземпляры javax.jnlp.JNLPRandomAccessFile поддерживают и чтение и запись в файл произвольного доступа. Файл произвольного доступа ведет себя как многочисленный массив байтов, сохраненных в файловой системе. Вот пример как экземпляр a JNLPRandomAccessFile может использоваться, чтобы записать в файл произвольного доступа:
import javax.jnlp.*;
...
FileOpenService fos;
//Initialize fos (see Using the FileOpenService Service example)
...
if (fos != null) {
try {
// ask the user to choose a file to open
FileContents fc = fos.openFileDialog(null, null);
// attempt to increase the maximum file length
long grantedLength = fc.getLength();
if (grantedLength + 1024 > fc.getMaxLength()) {
// attempt to increase the maximum file size defined by
// the client
grantedLength = fc.setMaxLength(grantedLength + 1024);
}
// if we were able to increase the maximum allowable file size,
// get a JNLPRandomAccessFile representation of the file, and
// write to it
if (fc.getMaxSize() > fc.getLength() && fc.canWrite()) {
JNLPRandomAccessFile raf = fc.getRandomAccessFile("rw");
raf.seek(raf.length() - 1);
raf.writeUTF("Java Web Start!");
raf.close();
}
} catch (Exception e) {
e.printStackTrace();
}
}
SingleInstanceService Службаjavax.jnlp.SingleInstanceService обеспечивает ряд методов для приложений, чтобы зарегистрировать себя как одиночные элементы, и зарегистрировать слушателя (ей) для того, чтобы обработать параметры, которые передают в от различных экземпляров приложений.
import javax.jnlp.*;
...
SingleInstanceService sis;
...
try {
sis =
(SingleInstanceService)ServiceManager.lookup("javax.jnlp.SingleInstanceService");
} catch (UnavailableServiceException e) { sis=null; }
...
// Register the single instance listener at the start of your application
SISListener sisL = new SISListener();
sis.addSingleInstanceListener(sisL);
...
// Remember to remove the listener before your application exits
sis.removeSingleInstanceListener(sisL);
System.exit(0);
// Implement the SingleInstanceListener for your application
class SISListener implements SingleInstanceListener {
public void newActivation(String[] params) {
// your code to handle the new arguments here
...
}
}
ExtendedService Службаjavax.jnlp.ExtendedService оказывает дополнительную поддержку текущему API JNLP. Это позволяет приложениям открывать определенный файл (ы) в файловой системе клиента.
import javax.jnlp.*;
...
ExtendedService es;
...
try {
es =
(ExtendedService)ServiceManager.lookup("javax.jnlp.ExtendedService");
} catch (UnavailableServiceException e) { es=null; }
...
// Open a specific file in the local machine
File a = new File("c:\somefile.txt");
...
// Java Web Start will pop up a dialog asking the user to grant permission
// to read/write the file c:\somefile.txt
FileContents fc_a = es.openFile(a);
// You can now use the FileContents object to read/write the file
...
// Open a specific set of files in the local machine
File[2] fArray = new File[2];
fArray[0] = a;
fArray[1] = new File("c:\anotherFile.txt");
// Java Web Start will pop up a dialog asking the user to grant permission
// to read/write files in fArray
FileContents[] fc_Array = es.OpenFiles(fArray);
// You can now read/write the set of files in fc_Array using the
// FileContents objects
}
Для получения дальнейшей информации на использовании javaws, см. javaws Интерфейс командной строки.