Adobe Acrobat перехватывает каждый URL от вызова до BasicService.showDocument () в Java - PullRequest
5 голосов
/ 24 января 2011

Наше внутреннее Java-приложение запускает различные URL-адреса http в разное время, включая URL-адреса веб-страниц, документы MS Word, документы MS Excel, файлы PDF и т. Д.

На более чем 50 компьютерах запуск URL работает нормально, и правильное приложение правильно открывает данную страницу / документ. Однако на одной противной машине Adobe Acrobat пытается открыть каждый URL-адрес (независимо от того, является ли цель PDF-файлом или нет) и завершается неудачно (даже в PDF-документах) с помощью:

При открытии этого документа произошла ошибка. Неверный синтаксис имени файла, имени каталога или метки тома.

Код для запуска URL:

URL url = new URL("http://www.example.com");
BasicService bs = (BasicService)ServiceManager.lookup("javax.jnlp.BasicService");
boolean worked = bs.showDocument(url);

Переменная worked имеет значение true после вызова.

Другие моменты, которые могут быть полезны:

  • Приложение работает в Java Web-Start.
  • Апплет, работающий на том же компьютере, может правильно открывать URL, используя AppletContext.showDocument()
  • При вводе URL-адреса в диалоговом окне «Выполнить ...» Windows корректно запускается URL-адрес.
  • Мы переустановили JRE и Adobe Acrobat.

Заранее благодарим за любой совет / помощь, которую вы можете предложить.

Обновление:

Следующий код отладки выдает следующий вывод:

    String[] services = ServiceManager.getServiceNames();
    if(services!=null) {
      for(int i=0;i<services.length;i++) {
        System.out.println("Available Service: "+services[i]);
      }
    }

    BasicService bs = (BasicService)ServiceManager.lookup("javax.jnlp.BasicService");
    System.out.println(url);
    System.out.println(bs);
    System.out.println("bs.getCodeBase():"+bs.getCodeBase());
    System.out.println("bs.isOffline():"+bs.isOffline());
    System.out.println("bs.isWebBrowserSupported():"+bs.isWebBrowserSupported());
    boolean worked = bs.showDocument(url);
    System.out.println("bs.showDocument:"+worked);
  } catch(UnavailableServiceException ue) {
    System.out.println("UnavailableServiceException thrown");
    ue.printStackTrace();
  }


Available Service: javax.jnlp.BasicService
Available Service: javax.jnlp.FileOpenService
Available Service: javax.jnlp.FileSaveService
Available Service: javax.jnlp.DownloadService
Available Service: javax.jnlp.ClipboardService
Available Service: javax.jnlp.PersistenceService
Available Service: javax.jnlp.PrintService
Available Service: javax.jnlp.ExtendedService
Available Service: javax.jnlp.SingleInstanceService
http://<snip>
com.sun.jnlp.BasicServiceImpl@bbb8b5
bs.getCodeBase():http://xxx.xxxxxx.com:8080/
bs.isOffline():false
bs.isWebBrowserSupported():true
bs.showDocument:true

1 Ответ

1 голос
/ 20 февраля 2011

Вы уже решили эту проблему? Если нет, не могли бы вы попробовать следующее?

FileOpenService fos = (FileOpenService)ServiceManager.lookup("javax.jnlp.FileOpenService"); 
...