title: Java, cannot delete file on Windows
body: <p>I have a simple updater for my application. In code i am downloading a new version, deleting old version and renaming new version to old.</p>
  
  <p>It works fine on Linux. But doesn't work on Windows. There are no excepions or something else.
  p.s. RemotePlayer.jar it is currently runned application.</p>
  
  <p><strong>UPDATED:</strong></p>
  
  <p>Doesn't work - it means that after file.delete() and file.renameTo(...)  file still alive.
  I use sun java 7. (because I use JavaFX).</p>
  
  <p>p.s. Sorry for my English.</p>
  
  <pre><code>public void checkUpdate(){
      new Thread(new Runnable() {
          @Override
          public void run() {
              System.err.println("Start of checking for update.");
              StringBuilder url = new StringBuilder();
              url.append(NetworkManager.SERVER_URL).append("/torock/getlastversionsize");
              File curJarFile = null;
              File newJarFile  = null;
  
              try {
                  curJarFile = new File(new File(".").getCanonicalPath() + "/Player/RemotePlayer.jar");
                  newJarFile = new File(new File(".").getCanonicalPath() + "/Player/RemotePlayerTemp.jar");
                  if (newJarFile.exists()){
                      newJarFile.delete();
                  }
              } catch (IOException e) {
                  e.printStackTrace();  //To change body of catch statement use File | Settings | File Templates.
                  System.err.println("Cannot find curr Jar file");
                  return;
              }
  
              if (curJarFile.exists()){
                  setAccesToFile(curJarFile);
                  try {
                      String resp = NetworkManager.makeGetRequest(url.toString());
                      JSONObject jsresp = new JSONObject(resp);
                      if (jsresp.getString("st").equals("ok")){
                          if (jsresp.getInt("size") != curJarFile.length()){
                              System.out.println("New version available, downloading started.");
                              StringBuilder downloadURL = new StringBuilder();
                              downloadURL.append(NetworkManager.SERVER_URL).append("/torock/getlatestversion");
  
                              if (NetworkManager.downLoadFile(downloadURL.toString(), newJarFile)){
  
                                  if (jsresp.getString("md5").equals(Tools.md5File(newJarFile))){
                                      setAccesToFile(newJarFile);
                                      System.err.println("Deleting old version. File = " + curJarFile.getCanonicalPath());
  
                                      boolean b = false;
                                      if (curJarFile.canWrite() &amp;&amp; curJarFile.canRead()){
                                          curJarFile.delete();
                                      }else System.err.println("Cannot delete cur file, doesn't have permission");
  
                                      System.err.println("Installing new version. new File = " + newJarFile.getCanonicalPath());
  
                                      if (curJarFile.canWrite() &amp;&amp; curJarFile.canRead()){
                                          newJarFile.renameTo(curJarFile);
                                          b = true;
                                      }else System.err.println("Cannot rename new file, doesn't have permission");
  
                                      System.err.println("last version has been installed. new File  = " + newJarFile.getCanonicalPath());
  
                                      if (b){
                                          Platform.runLater(new Runnable() {
                                              @Override
                                              public void run() {
                                                  JOptionPane.showMessageDialog(null, String.format("Внимание, %s", "Установлена новая версия, перезапустите приложение" + "", "Внимание", JOptionPane.ERROR_MESSAGE));
  
                                              }
                                          });
                                      }
                                  }else System.err.println("Downloading file failed, md5 doesn't match.");
                              }
                          } else System.err.println("You use latest version of application");
                      }
                  }catch (Exception e){
                      e.printStackTrace();
                      System.err.println("Cannot check new version.");
                  }
  
              }else {
                  System.err.println("Current jar file not found");
              }
          }
      }).start();
  }
  
  private void setAccesToFile(File f){
      f.setReadable(true, false);
      f.setExecutable(true, false);
      f.setWritable(true, false);
  }
  </code></pre>