我的代码是这样的
try
{
StringBuilder sb = new StringBuilder("cmd.exe /C start " + gameExecutable);
if (gameExecutable == null) {
OptionPane.showMessageDialog(RunGameButton, "Could not find game executable automatically.");
return;
}
if(selectedFiles != null) {
for(File mods : selectedFiles)
sb.append(" -file ").append(mods.getName());
}
}
但是,在加载我的文件时(例如:file1.pk3,file2.wad,file3.wad和file4.pk3),(假设gameExecutable是“game.exe”),它会加载cmd参数< / p>
game.exe -file "file1.pk3" "file2.wad" "file3.wad" "file4.pk3"
但是对game.exe的期望输出是
game.exe -file file1.pk3 -file file2.wad -file file3.wad -file file4.pk3
OR
game.exe -file "file1.pk3" -file "file2.wad" -file "file3.wad" -file "file4.pk3"
为什么不按所需方式加载?如何使用所需的输出加载它?
答案 0 :(得分:2)
我认为selectedFiles
是一个只有一个File
对象的数组,该对象的名称是:
"file1.pk3" "file2.wad" "file3.wad" "file4.pk3"
这将是一个奇怪的名字,但并非无效,并会解释这种行为。
你可以用这个替换你的内心for
:
for(File mods : selectedFiles)
{
System.out.println("This is a single file: " + mods.getName());
sb.append(" -file ").append(mods.getName());
}
修改强>
我从未听说过JFileBrowser,但现在我看到its documentation我看到它的get
方法被声明为:
public String get ()
因此,即使您选择了多个文件,它也会返回String
,而不是Strings
的数组,所以如果您执行了类似的操作:
File myFile = new File(browser.get())
然后它会创建一个File
,上面有一个奇怪的名字。
答案 1 :(得分:0)
简而言之,我建议您尝试&gt;
答案 2 :(得分:0)
如果“selectedFiles”是一个集合,那么您的代码就可以运行:
for(File mods : selectedFiles)
sb.append(" -file ").append(mods.getName());
我尝试了它,它按预期工作:
public class Test {
public static void main(String[] args) {
String selectedFiles[] = {"file1","file2","file3"};
StringBuilder sb = new StringBuilder("cmd.exe /C start " + "game.exe");
for(String file : selectedFiles)
sb.append(" -file ").append(file);
System.out.println(sb.toString());
}
}
输出:
cmd.exe / C启动game.exe -file file1 -file file2 -file file3
答案 3 :(得分:-1)
我修复了问题。将System.out.println(sb.toString());
添加到底部。当我将文件放在与gameExecutable相同的目录
当他们不在同一个地方时,不知道为什么会引起问题。但它确实有效。