2011-10-06 153 views
1

我有一個使用Swing庫的桌面應用程序。應用程序正在運行批處理文件。所以我在主項目目錄下創建了一個lib文件夾,並將批處理文件放入其中。運行這個,我顯示lib\a.exe來運行這個。它正在我的筆記本電腦上工作。我導出.jar並將lib文件夾放在它旁邊。它在我的筆記本電腦上工作,但不在其他一些筆記本電腦上工作。如何解決這個問題?如何聲明文件夾路徑?

錯誤消息是:Windows無法找到lib\a.exe

String command = "cmd /c start lib\\a.exe"; 
      try { 
       Runtime.getRuntime().exec(command); 
       increaseProgressBarValue(); 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 
+1

你可以把一些代碼? –

+0

好的,我編輯了我的問題。它無法找到與jar相同的文件夾(但在某些計算機上工作)的lib文件夾。我必須在5分鐘內解決這個問題:) –

+1

你可以得到工作目錄 '''''''''''curdir = System.getProperty(「user.dir」);' –

回答

2

你需要兩樣東西:

  1. 找到你的應用程序的jar文件
  2. 呼叫A.EXE用正確的工作目錄的目錄

你可以得到的位置jar下面的getJar方法:

private static File getJar(Class clazz) throws MalformedURLException { 
    String name = clazz.getName().replace('.','/') + ".class"; 
    ClassLoader cl = Thread.currentThread().getContextClassLoader(); 
    URL url = cl.getResource(name); 
    System.out.println(url); 
    if (!"jar".equals(url.getProtocol())) { 
     throw new MalformedURLException("Expected a jar: URL " + url); 
    } 
    String file = url.getPath(); 
    int pos = file.lastIndexOf('!'); 
    if (pos < 0) { 
     throw new MalformedURLException("Expected ! " + file); 
    } 
    url = new URL(file.substring(0, pos)); 
    if (!"file".equals(url.getProtocol())) { 
     throw new MalformedURLException("Expected a file: URL " + url); 
    } 
    String path = url.getPath(); 
    if (path.matches("/[A-Za-z]:/")) { // Windoze drive letter 
     path = path.substring(1); 
    } 
    return new File(path); 
} 

要調用lib \ a.exe,您可以執行s像這樣:

File jar = getJar(MyClass.class); // MyClass can be any class in you jar file 
File dir = jar.getParentFile(); 
ProcessBuilder builder = new ProcessBuilder(); 
builder.command("lib\\a.exe"); 
builder.directory(dir); 
... 
Process p = builder.start(); 
... 
+0

謝謝你,你的方法很優雅。 –

0

也許你有嘗試,如果該文件夾的lib存在,如果它不比

file.mkdir(); 

創建它這是一個只是一個檢查。但是你的文件路徑必須是這樣的../lib/a.exe。

+0

你的答案完全無效。我不想創建一個文件夾。我的lib文件夾已經在jar旁邊了! –

+0

Opps我忘記了當你使用一些目錄出來的jar你必須設置文件路徑像這樣../lib/a.exe,並會正常工作。問題在於當你運行jar時,JVM在jar中搜索lib flder的某處。試試../lib/a.exe –