2013-07-25 29 views
0

在我的自動更新程序中,我正在下載一個壓縮文件,其中包含新的MyApp.app應用程序文件。所以,我下載MyApp.zip。然後我用這個下面的類,試圖將它解壓縮:Java將zip壓縮回.app(OS X)

package update; 

import java.io.BufferedOutputStream; 
import java.io.File; 
import java.io.FileInputStream; 
import java.io.FileOutputStream; 
import java.io.IOException; 
import java.io.InputStream; 
import java.io.OutputStream; 
import java.util.Enumeration; 
import java.util.List; 
import java.util.zip.ZipEntry; 
import java.util.zip.ZipFile; 
import java.util.zip.ZipInputStream; 

public class UnZip { 

    public static final void copyInputStream(InputStream in, OutputStream out) 
    throws IOException 
    { 
    byte[] buffer = new byte[1024]; 
    int len; 

    while((len = in.read(buffer)) >= 0) 
     out.write(buffer, 0, len); 

    in.close(); 
    out.close(); 
    } 

    public static final void unZipIt(String F1, String F2) { 
    Enumeration entries; 
    ZipFile zipFile; 

    try { 
     zipFile = new ZipFile(F1); 

     entries = zipFile.entries(); 

     while(entries.hasMoreElements()) { 
     ZipEntry entry = (ZipEntry)entries.nextElement(); 

     if(entry.isDirectory()) { 
      // Assume directories are stored parents first then children. 
      System.err.println("Extracting directory: " + entry.getName()); 
      // This is not robust, just for demonstration purposes. 
      (new File(entry.getName())).mkdirs(); 
      continue; 
     } 

     System.err.println("Extracting file: " + entry.getName()); 
     copyInputStream(zipFile.getInputStream(entry), 
      new BufferedOutputStream(new FileOutputStream(entry.getName()))); 
     } 

     zipFile.close(); 
    } catch (IOException ioe) { 
     System.err.println("Unhandled exception:"); 
     ioe.printStackTrace(); 
     return; 
    } 
    } 

    } 

然而之後的解壓縮應用程序不會啓動..任何想法?

+0

你是否使解壓縮的文件可執行? –

+0

我該怎麼做? :) – Alosyius

+0

好吧,應該說,在我壓縮它,並將其發送到服務器的文件執行罰款 – Alosyius

回答

1

您的可執行文件很可能未被標記爲可執行文件。訣竅是.app「文件」實際上是目錄,因此使它們成爲可執行文件沒有實際用途,您需要找到實際的二進制文件。

要做到這一點,您需要打開./myApp.app/Contents/Info.plit並查找CFBundleExecutable鍵:相關字符串是可執行文件的路徑,相對於./myApp.app/Contents/MacOS,我相信。

一旦找到該文件,chmod +x它,並檢查您的應用程序是否仍然無法啓動。

如果沒有,問題就解決了。

如果有,請嘗試通過open ./myApp.app命令從終端打開您的應用程序。如果有什麼奇怪的打印,用它更新你的問題,讓我們知道那是什麼。

如果一切都失敗了,請查看Console應用程序以獲取有趣的日誌條目 - 您可以搜索應用程序的名稱,查看是否有任何內容出現。

+0

這解決了它!感謝您幫助我找到錯誤! http://apple.stackexchange.com/questions/81330/downloaded-apps-does-not-start-error-10658 – Alosyius

+0

還有一些應用程序捆綁了助手應用程序,其可執行文件還必須定位並執行。這可能會很痛苦。 –