开发者

How do I open an image in the default image viewer using Java on Windows?

I have a button to view an image attached to a log entry and when the user clicks that button I want it to open the image in the user's default image viewer on a Windows machine?

How do I know which viewer in the default image viewer?

Right now I'm doing something like this but it doesn't work:

String filename = "\""+(String)attachmentsComboBox.getSelectedItem()+"\"";
Runtime.getRuntime().exec("rundll32.exe C:\\WINDOWS\\System32\\sh开发者_如何学Goimgvw.dll,ImageView_Fullscreen "+filename);

And by doesn't work I mean it doesn't do anything. I tried to run the command just in the command line and nothing happened. No error, nothing.


Try with the CMD /C START

public class Test2 {
  public static void main(String[] args) throws Exception {
    String fileName = "c:\\temp\\test.bmp";
    String [] commands = {
        "cmd.exe" , "/c", "start" , "\"DummyTitle\"", "\"" + fileName + "\""
    };
    Process p = Runtime.getRuntime().exec(commands);
    p.waitFor();
    System.out.println("Done.");
 }
}

This will start the default photo viewer associated with the file extension.

A better way is to use java.awt.Desktop.

import java.awt.Desktop;
import java.io.File;

public class Test2 {
  public static void main(String[] args) throws Exception {
    File f = new File("c:\\temp\\test.bmp");
    Desktop dt = Desktop.getDesktop();
    dt.open(f);
    System.out.println("Done.");
 }
}

See Launch the application associated with a file extension


You can use the Desktop class which does exactly what you need, to open system associated application.

File file = new File( fileName );
Desktop.getDesktop().open( file );


Another solution that works well on Windows XP/Vista/7 and can open any type of file (url, doc, xml, image, etc.)

Process p;
try {
    String command = "rundll32 url.dll,FileProtocolHandler \""+ new File(filename).getAbsolutePath() +"\"";

    p = Runtime.getRuntime().exec(command);
    p.waitFor();

} catch (IOException e) {
    // TODO Auto-generated catch block

} catch (InterruptedException e) {
    // TODO Auto-generated catch block
}
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜