Spec-Zone .ru
спецификации, руководства, описания, API
Содержание документации

<Содержание

Примеры API JNLP


Эта глава включает следующие темы:

Введение

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 выпусков, обеспечивает следующие методы:

Экземпляр 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 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]);" 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(); 
        } 
    } 

Используя a 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 Интерфейс командной строки.


Oracle и/или его филиалы Авторское право © 1993, 2011, Oracle и/или его филиалы. Все права защищены.
Свяжитесь с Нами