如何在SWT中使用默认应用程序打开文件?

6

例如,我有一个.pdf文件(该文件的路径)。如何在SWT应用程序中打开默认应用程序(可能是Acrobat Reader)来打开此文件(例如在按钮单击时)?

3个回答

12

你可以使用以下代码:

Program.launch(file);

打开文件(使用默认应用程序或创建者)。根据Javadoc:

启动与文件或URL(http://或https://)相关联的操作系统可执行文件。如果文件是可执行文件,则会启动可执行文件。请注意,必须已经存在一个Display才能保证此方法返回适当的结果。

请注意,在Program.launch()中存在一些特殊情况(或者至少在最近的运行时版本中有修复这些问题)。我不太记得错误的具体细节,但我们进行了一些检查以解决某些问题:

  1. 如果您在Unix平台上,并且指定了绝对路径,则可能无法打开该文件。我们使用“/。”前缀绝对路径 - 因此/tmp/foo将被转换为/./tmp/foo - 尽管我不太记得这个错误的具体细节。

  2. 在Windows上,如果您尝试打开UNC路径 - 例如\\server\bar - 您需要将字符串用双引号括起来。例如:Program.open("\"\\server\bar\"");


在我的应用程序中,在winXp和win7上调用Program.launch("C:\\dev\\test.pdf");可以很好地工作 - Acrobat Reader被打开,就是这样。谢谢。 - marioosh
@edward-thomson,“Program”类在哪个包中找到? - Pranit Bauva

1
也许这可以帮助找到决策:我们在调用AWT包中的Desktop.open()时遇到了PermGen空间问题,这发生在我们的SWT应用程序之外。因此,在SWT环境中,我更喜欢使用Program.launch()而不是Desktop.open()

1

尝试使用 Desktop.open:

Desktop.getDesktop().open(file);

2
个人而言,我更喜欢 SWT 的解决方案而不是 AWT。SWT <-> AWT 桥通常是不必要的,除非你必须使用它,最好不要使用它。 - Edward Thomson

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接