Java - Desktop.getDesktop().browse(URI) is supported, but does not open document (a citrix problem?)

14,586

Solution 1

I think the cause of this symptom is the awt package what uses a system call what the win2008 not supports. But it's a tip.

I think You should try an other solution for this:

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

Solution 2

To open a local file you have to use Desktop().open() not Desktop.browse()

Solution 3

Another easy possibility that I have tested on Windows XP:

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

Solution 4

Desktop.browse() launches the local web browser. On Windows, the web browser is probably kicking it out to the default shell, which opens the file.

My guess is that the browser on the Citrix system cannot/doesn't handle the file properly, thus not passing it to the shell.

In any case, it appears that if you are opening a file (and not a URL), then you want to use Destop.open() instead.

Share:
14,586
Jayan
Author by

Jayan

http://stackoverflow.com/search?q=user%3a54506&tab=votes

Updated on June 13, 2022

Comments

  • Jayan
    Jayan almost 2 years

    (I am not sure if this is the correct place to ask this question. Please move to suitable site)

    I have a problem that is shown in below code. It does not work on machine (windows 2008) that has CITRIX Xen App 6-. There is no error, just that browser does not get launched. On my desktop (a windows7 box), it works.

    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");
            }
        }
    }
    

    I tried to use "open" as suggested in following answers. It did not work. The problem is narrowed down to 64bit version of Java(Oracle 1.6.0_25)

  • JohnnyO
    JohnnyO over 12 years
    This doesn't work on non-Windows systems, so I'd recommend against using it.
  • Jayan
    Jayan over 11 years
    An actual code fix is not found, we used above work around , but used ProcessBuilder.