Spec-Zone .ru
спецификации, руководства, описания, API
|
Эта глава включает следующие темы:
BasicService
СлужбаClipboardService
СлужбаDownloadService
СлужбаDownloadService2
СлужбаDownloadServiceListener
СлужбаFileOpenService
СлужбаFileSaveService
СлужбаIntegrationService
СлужбаPrintService
СлужбаPersistenceService
СлужбаFileContents
JNLPRandomAccessFile
SingleInstanceService
Служба
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
класс определяет детали о ресурсе, который будет проверен.
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 onhttp://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 // serverhttp://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]);" em>// 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 инкапсулируют имя и содержание файла. Объект этого класса используется FileOpenService, FileSaveService and 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 Интерфейс командной строки.