Java - 支持Desktop.getDesktop()。browse(URI),但不打开文档(Citrix问题?)

时间:2011-08-26 08:07:00

标签: java windows 64-bit citrix xenapp

(我不确定这是否是提出这个问题的正确位置。请转到合适的网站)

我有一个问题,如下面的代码所示。它不适用于具有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)

5 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:1)

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

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

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

答案 2 :(得分:1)

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

答案 3 :(得分:1)

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

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

在任何情况下,如果您要打开文件(而不是网址),则可能需要使用Destop.open()

答案 4 :(得分:0)

我遇到了与桌面类似的问题。

如果文件无法打开但抛出异常,请尝试编辑它。我遇到了一些图像文件和窗口的问题,因为没有关联的程序而是编辑器。