【问题标题】:Java - Desktop.getDesktop().browse(URI) is supported, but does not open document (a citrix problem?)Java - 支持 Desktop.getDesktop().browse(URI),但不打开文档(Citrix 问题?)
【发布时间】:2011-08-26 08:06:59
【问题描述】:

(我不确定这是否是问这个问题的正确地方。请移至合适的网站)

我有一个问题,如下面的代码所示。它不适用于具有 CITRIX Xen App 6- 的机器(Windows 2008)。没有错误,只是浏览器没有启动。在我的桌面(一个 windows7 盒子)上,它可以工作。

package trials;

import java.awt.*;
import java.io.File;
import java.io.IOException;


public class Launch {

    public static void main(String[] args) throws IOException {
        if (args.length < 1) {
            System.out.println("argument filepath expected");
            return;
        }

        final boolean browseSupported = Desktop.getDesktop().isSupported(Desktop.Action.BROWSE);
        if ( !browseSupported) {
            System.out.println("Browse not supported");
            return;
        }

        final String filename = args[0];
        final File file = new File(filename);
        if (file.exists()) {
            Desktop.getDesktop().browse(file.toURI());
        } else {
            System.out.println(file.getAbsolutePath() + " does not exist");
        }
    }
}

我尝试按照以下答案中的建议使用“打开”。它不起作用。问题缩小到 64 位版本的 Java(Oracle 1.6.0_25)

【问题讨论】:

    标签: java windows 64-bit citrix xenapp


    【解决方案1】:

    要打开本地文件,您必须使用Desktop().open() 而不是Desktop.browse()

    【讨论】:

      【解决方案2】:

      我认为这个症状的原因是awt包使用了win2008不支持的系统调用。但这是一个提示。

      我认为您应该为此尝试其他解决方案:

      if (file.exists()) {
              Runtime.getRuntime().exec("rundll32 url.dll,FileProtocolHandler " + file.toURI());
          } else {
              System.out.println(file.getAbsolutePath() + " does not exist");
          }
      

      【讨论】:

      • 这在非 Windows 系统上不起作用,所以我建议不要使用它。
      • 没有找到实际的代码修复,我们使用了上面的解决方法,但使用了 ProcessBuilder。
      【解决方案3】:

      我在 Windows XP 上测试过的另一种简单的可能性:

      org.eclipse.swt.program.Program.launch("file://" + filename);
      

      【讨论】:

        【解决方案4】:

        Desktop.browse() 启动本地网络浏览器。在 Windows 上,网络浏览器可能会将其踢出到默认 shell,这会打开文件。

        我的猜测是 Citrix 系统上的浏览器无法/没有正确处理文件,因此没有将其传递给 shell。

        无论如何,如果您正在打开一个文件(而不是一个 URL),那么您希望使用 Destop.open() 来代替。

        【讨论】:

          【解决方案5】:

          Desktop-class 我也有类似的问题。

          如果文件无法打开但引发异常,请尝试对其进行编辑。我在处理一些图像文件和窗口时遇到了问题,因为没有关联的程序,只有一个编辑器。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2015-03-08
            • 1970-01-01
            • 2022-10-20
            • 2016-10-14
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多