-
Bug
-
Resolution: Fixed
-
P3
-
jfx11, 8, jfx17, jfx18, jfx19
-
b04
-
x86_64
-
windows_10
ADDITIONAL SYSTEM INFORMATION :
javafx18.0.1/Win10/Java18.0.1
A DESCRIPTION OF THE PROBLEM :
One temporary file like "~DF9C122A94A842C2B6.TMP" is created for each calling of Clipboard.getSystemClipboard().getImage(). These files are not removed automatically even after call System.gc() or exit the application. This means they occupy space of Java temporary path continually.
Example, size of temporary file is 32+ MB on my platform. When my application is monitoring images in system clipboard, it calls Clipboard.getSystemClipboard().getImage() in a interval like 1 second, which write 32+ MB file in every second, then 120G space is eaten up after some time.
STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
1) Define a button to look at image in system clipboard, like following:
@FXML
public void refreshAction() {
Clipboard clipboard = Clipboard.getSystemClipboard();
if (!clipboard.hasImage()) {
return;
}
clipboard.getImage();
}
2) Click this button, and watch files created under Java temporary path(System.getProperty("java.io.tmpdir")).
3) Call System.gc() and check whether the temporary files are cleared.
4) Exit the application and check whether the temporary files are cleared.
EXPECTED VERSUS ACTUAL BEHAVIOR :
EXPECTED -
Temporary files should be cleared automatically.
ACTUAL -
Temporary files are persistent and occupy space of Java temporary path continually.
CUSTOMER SUBMITTED WORKAROUND :
Call following before and after Clipboard.getSystemClipboard().getImage().
public static void clearTmpClips() {
try {
System.gc();
File path = new File(System.getProperty("java.io.tmpdir"));
File[] files = path.listFiles();
if (files == null) {
return;
}
for (File file : files) {
try {
if (file.isFile() && file.getName().endsWith(".TMP")) {
FileUtils.deleteQuietly(file);
}
} catch (Exception e) {
}
}
} catch (Exception e) {
}
}
FREQUENCY : always
javafx18.0.1/Win10/Java18.0.1
A DESCRIPTION OF THE PROBLEM :
One temporary file like "~DF9C122A94A842C2B6.TMP" is created for each calling of Clipboard.getSystemClipboard().getImage(). These files are not removed automatically even after call System.gc() or exit the application. This means they occupy space of Java temporary path continually.
Example, size of temporary file is 32+ MB on my platform. When my application is monitoring images in system clipboard, it calls Clipboard.getSystemClipboard().getImage() in a interval like 1 second, which write 32+ MB file in every second, then 120G space is eaten up after some time.
STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
1) Define a button to look at image in system clipboard, like following:
@FXML
public void refreshAction() {
Clipboard clipboard = Clipboard.getSystemClipboard();
if (!clipboard.hasImage()) {
return;
}
clipboard.getImage();
}
2) Click this button, and watch files created under Java temporary path(System.getProperty("java.io.tmpdir")).
3) Call System.gc() and check whether the temporary files are cleared.
4) Exit the application and check whether the temporary files are cleared.
EXPECTED VERSUS ACTUAL BEHAVIOR :
EXPECTED -
Temporary files should be cleared automatically.
ACTUAL -
Temporary files are persistent and occupy space of Java temporary path continually.
CUSTOMER SUBMITTED WORKAROUND :
Call following before and after Clipboard.getSystemClipboard().getImage().
public static void clearTmpClips() {
try {
System.gc();
File path = new File(System.getProperty("java.io.tmpdir"));
File[] files = path.listFiles();
if (files == null) {
return;
}
for (File file : files) {
try {
if (file.isFile() && file.getName().endsWith(".TMP")) {
FileUtils.deleteQuietly(file);
}
} catch (Exception e) {
}
}
} catch (Exception e) {
}
}
FREQUENCY : always