Linux似乎很简单:xdg-open <file/directory/URL>.
显然,Mac是相似的:open应该用来代替xdg-open.我无法访问Mac,因此无法测试它.
对于Windows,我发现了4个不同的建议,而我尝试过的建议失败了.
是否有非java,跨平台的方式来启动某个文件类型的关联应用程序?
提示start
如何从Java开始关注shell打开文件的默认程序?提示
cmd /c start ...
如何打开给定文件的用户系统首选编辑器?
如何使用Java查找默认文件打开程序?
建议
RUNDLL32.exe
什么是使用的ShellExecute(c)中打开.txt的正确方式
中的C++代码与Windows的本地程序打开文件
如何使用ShellExecute的用C在Windows中打开HTML文件++?建议
ShellExecute
我已经尝试的第一个3 system()和QProcess::startDetached(),并"http://www.stackoverflow.com"作为参数,但都失败了; start但是从命令行工作得很好.我还没有尝试过ShellExecute.
什么是Windows相当于xdg-open?在我看来,这是start为什么我的尝试start失败了?
是ShellExecute我唯一的选择吗?
编辑我认为QDesktopServices::openUrl()仅适用于网页,因为它不适用于文件或目录.
一些调试后,我想通了,如果我取代\\与/在Windows上的路径,它适用于文件,但该目录还没有打开.我有什么想法我做错了吗?
QDir dir("C:/Documents and Settings/ali");
qDebug() << "Exists? " << dir.exists();
qDebug() << dir.absolutePath();
QDesktopServices::openUrl(QUrl(dir.absolutePath()));
qDebug() << …Run Code Online (Sandbox Code Playgroud) 有一个超链接.单击时,我想要在外部浏览器中打开一个链接.
网上引用的常用方法似乎是:
final Hyperlink hyperlink = new Hyperlink("http://www.google.com");
hyperlink.setOnAction(t -> {
application.getHostServices().showDocument(hyperlink.getText());
});
Run Code Online (Sandbox Code Playgroud)
但是我没有参考Application.所述链路是从对话,这是从一个控制器,其经由FXML文件打开打开打开,从而获得到应用程序对象的引用将是相当痛苦.
有谁知道这样做的简单方法?
干杯
我需要找到Windows上给定文件的默认文件打开器,以便我可以自定义命令参数并使用默认的opener/viewer打开文件.
我的实际使用场景是使用用户的默认媒体播放器打开多个多媒体文件,以便将所有文件添加到用户的播放列表中(对于可以在同一个媒体上打开多个文件的播放器).对于Windows以外的操作系统我使用Desktop.open(File file)方法(我根本不关心为Windows以外的操作系统打开多个文件功能),我找不到任何方法可以打开多个文件而不是自定义命令参数并使用exec()方法运行它运行时类.我使用类似于此的somethig:
private void playItems2(List<File> fileList, String playerBinary) {
String args = " ";
for (File file : fileList) {
args += "\"" + file.getAbsolutePath() + "\" ";
}
try {
String command = playerBinary + args;
Runtime rt = Runtime.getRuntime();
Process p = rt.exec(command);
} catch (Exception exc) {/*handle exception*/
System.err.println("Run Player Exc:" + exc.getMessage());
}
}
Run Code Online (Sandbox Code Playgroud)
我正在使用用户指定的路径playerBinary,我需要的是自动检测第一项的默认播放器fileList并将其用作playerBinary.
我还查看了Rundll32.exe和cmd.exe/start解决方案,但它们对我的使用场景不起作用.
在第七窗口中,以下命令显示一个对话框,然后终止而没有任何其他操作,为什么?
预期效果是启动关联程序Notepad++或至少启动Notepad
RUNDLL32.EXE SHELL32.DLL,OpenAs_RunDLL D:\doc\toto.txt
Run Code Online (Sandbox Code Playgroud)

我需要我的java代码来打开基于默认应用程序的文件.感谢 如何为给定文件打开用户系统首选编辑器?这表明了一种质量方法
Runtime.getRuntime().exec("RUNDLL32.EXE SHELL32.DLL,OpenAs_RunDLL "+file);
Run Code Online (Sandbox Code Playgroud)
但问题是,一旦我选择要打开它的应用程序,它就不会打开文件.我不知道它的原因.
谢谢
编辑:
Desktop.getDesktop().open(file);
Run Code Online (Sandbox Code Playgroud)
这将在默认应用程序中打开 我希望用户选择要打开它的应用程序