Я работаю над JAVA с JSmooth.
Я вижу, что при каждом запуске создается tmp JAR.
Созданные файлы tmp jar составляют приблизительно 10 Мб.
Когда я выхожу из исполняемого приложения JAVA, созданного JSmooth,
файлы temp jar остаются на каждом запуске.
Я прочитал следующую тему о JSmooth:
JSmooth - exit applicationУборка вопроса на выходе
7.1.2.
Что происходит с извлеченным файлом jar при выходе из приложения Java?
По возможности обертки удаляют файл при выходе. Обратите внимание, однако, что это не всегда возможно. Например, экземпляр JVM, созданный с использованием JVM DLL, не разгружается. Такое поведение (не называть его ошибкой) задокументировано Sun, и для этого нет никакой известной работы.
Как оболочка Windowed, так и Console всегда предпочитают методы instaviation JVM, которые позволяют им удалять временную банку после выхода приложения. Обратите внимание, что вложение jar в exe не требуется, всегда безопасный выбор - просто оставить его в файловой системе рядом с исполняемым файлом, либо в том же каталоге, либо в родном или родительском каталоге.
Обратите внимание, что удаление файлов в каталоге Windows TEMP не требуется для приложений Windows, и большинство приложений просто оставляют их, позволяя операционной системе управлять им. Стандартное поведение MS Windows заключается в том, чтобы предложить пользователю удалить временные файлы, когда диски работают на доступном пространстве.
Я пытался удалить банку на выходе:
//For matching convention, I wrote the file in a not null package
package main;
import java.io.File;
//It is an utility class, so the class is final
public final class Constants {
//The tmp folder key
private static final String TMP_FOLDER = "java.io.tmpdir";
//The main class
private static Class<?> _mainClass_ = Constants.class;
//It is an utility class, so hide the constructor
private Constants(){
}
public static void main(String[] _args) {
//Processing
//....
exit();
}
/**@see System#exit(int)*/
public static void exit() {
String path_ =_mainClass_.getProtectionDomain().getCodeSource().getLocation().getPath();
//For keeping portability OS, replace all back slashes by slashes
path_ = new File(path_).getAbsolutePath().replace("\\", "/");
//For keeping portability OS, replace all back slashes by slashes
String folder_ = System.getProperty(TMP_FOLDER).replace("\\", "/");
if (path_.startsWith(folder_)) {
//If the jar is located in the temp folder, then delete it before exit.
System.out.println("path: "+path_);
System.out.println("folder: "+folder_);
//Try remove temp jar
new File(path_).delete();
new File(path_).deleteOnExit();
}
//Exit the program
System.exit(0);
}
}
Мой файл JSmooth:
<?xml version="1.0" encoding="ISO-8859-1"?>
<jsmoothproject>
<JVMSearchPath>exepath</JVMSearchPath>
<JVMSearchPath>registry</JVMSearchPath>
<JVMSearchPath>javahome</JVMSearchPath>
<JVMSearchPath>jrepath</JVMSearchPath>
<JVMSearchPath>jdkpath</JVMSearchPath>
<JVMSearchPath>jview</JVMSearchPath>
<arguments></arguments>
<bundledJVMPath>jre</bundledJVMPath>
<currentDirectory>${EXECUTABLEPATH}</currentDirectory>
<embeddedJar>false</embeddedJar>
<executableName>Test.exe</executableName>
<initialMemoryHeap>-1</initialMemoryHeap>
<jarLocation>target\Test.jar</jarLocation>
<mainClassName>main.Constants</mainClassName>
<maximumMemoryHeap>1073741824</maximumMemoryHeap>
<maximumVersion>1.7</maximumVersion>
<minimumVersion>1.7</minimumVersion>
<skeletonName>Windowed Wrapper</skeletonName>
<skeletonProperties>
<key>Message</key>
<value>Java has not been found on your computer. Do you want to download it?</value>
</skeletonProperties>
<skeletonProperties>
<key>URL</key>
<value>http://www.java.com</value>
</skeletonProperties>
<skeletonProperties>
<key>SingleProcess</key>
<value>0</value>
</skeletonProperties>
<skeletonProperties>
<key>SingleInstance</key>
<value>0</value>
</skeletonProperties>
<skeletonProperties>
<key>JniSmooth</key>
<value>0</value>
</skeletonProperties>
<skeletonProperties>
<key>Debug</key>
<value>1</value>
</skeletonProperties>
</jsmoothproject>
Я думаю, что это очень опасно, о свободном пространстве (в каждой запуск, свободное пространство уменьшается на 10 Мб) для компьютера , так как компьютер может быть неисправен.
Надеюсь, мой вопрос точен, и я ничего не нарушаю.
Я благодарю очень много людей, которые могли бы время ответить.
Что происходит, когда вы пытаетесь его удалить? – Ferrybig
@Ferrybig: файлы tmp JMP не удаляются. Никакое исключение не выбрасывается. Обратите внимание, что имена файлов tmp Jar отформатированы temp .jar. Пример: temp1.jar. Новичок-разработчик не знает, что в папке temp создается не только файл JMP-файла tmp, но также файл tmp Jar остается в временном файле. Для начинающих пользователей трудно понять, что они должны удалить файлы tmp jar после выполнения. –
cardman
Вы можете указать Windows для удаления этих файлов по крайней мере при перезагрузке с помощью PendigFileRenameOperations. Или вы пытаетесь удалить те из предыдущих запусков при каждом новом запуске. – Marged