Отказано в доступе. Linux
Есть некий лаунчер, который скачивает свою JRE архивом и разархивирует ее. Далее из-под этой jre пытается запустить другую java программу.
После разархивации архиве с своей JRE и последующей попытке запуска через этот jre высвечивается ошибка:
Так же, если зайти попробовать открыть файл вручную, то вылазит следующее:
В свойствах файла следующее:
Разархивация происходит следующим способом и без ошибок:
try {
ZipInputStream zipInputStream = new ZipInputStream(Files.newInputStream(Paths.get(zip)));
ZipEntry entry = zipInputStream.getNextEntry();
String[] name;
unzipping = true;
while (entry != null) {
name = entry.getName().split("/");
fileName = name[0];
if (this.updateInformation) ManagerZip.updateInfo(baseController);
File file = new File(pathToOut, entry.getName());
if (entry.isDirectory()) file.mkdirs();
else {
File parent = file.getParentFile();
if (!parent.exists()) parent.mkdirs();
try (BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(Files.newOutputStream(file.toPath()))) {
int bufferSize = Math.toIntExact(entry.getSize());
byte[] buffer = new byte[bufferSize > 0 ? bufferSize : 1];
int location;
while ((location = zipInputStream.read(buffer)) != -1) {
bufferedOutputStream.write(buffer, 0, location);
if (this.updateInformation) ManagerZip.updateInfo(baseController);
}
}
}
entry = zipInputStream.getNextEntry();
}
zipInputStream.closeEntry();
zipInputStream.close();
File file = new File(zip);
file.delete();
unzipping = false;
}catch (Exception e){
System.err.println("UNZIP ERROR: \n");
e.printStackTrace();
ManagerWindow.currentController.setInfoText(e.getMessage());
}
Попытка запуска программы происходит так:
new Thread(() -> {
try {
System.err.printf("================STARTUP[%s]SETTINGS================\n%s%n", this.version, Settings.show());
Runtime runtime = Runtime.getRuntime();
Process p1;
String start = getStartString();
System.err.printf("================STARTUP[%s]STRING================\n%s%n", this.version, start);
p1 = runtime.exec(start); //start - большая строка запуска, если она нужна, то скину в комментарии
InputStream is = p1.getInputStream();
ManagerFlags.gameIsStart = true;
ManagerWindow.currentController.setInfoText("Игра запущена");
int i;
while ((i = is.read()) != -1) {
System.out.print((char) i);
}
p1.waitFor();
ManagerFlags.gameIsStart = false;
Platform.runLater(() -> playController.PlayButtonEnabled(true));
} catch (Exception ex) {
ManagerWindow.currentController.setInfoText(ex.getMessage());
ex.printStackTrace();
}
}).start();
Даже если выдать вручную права всей папке(следовательно и всем файлам в ней), то ошибка будет та же.
Из-за чего это может быть? Как решить?
Источник: Stack Overflow на русском