diff --git a/.github/workflows/maven.yml b/.github/workflows/maven.yml
index b90f13f3..561f55fe 100644
--- a/.github/workflows/maven.yml
+++ b/.github/workflows/maven.yml
@@ -14,7 +14,7 @@ jobs:
runs-on: ubuntu-latest
strategy:
matrix:
- java: [ '8', '11', '16' ] # All currently supported versions
+ java: [ '8', '11', '17-ea' ] # LTS versions
steps:
- uses: actions/checkout@v2
@@ -22,7 +22,7 @@ jobs:
uses: actions/setup-java@v2
with:
java-version: ${{ matrix.java }}
- distribution: 'adopt'
+ distribution: 'temurin'
- name: Build with Maven
run: mvn -B package --file pom.xml
- name: Extract Maven project version
diff --git a/libs/README.md b/libs/README.md
index 504e763d..8112e98b 100644
--- a/libs/README.md
+++ b/libs/README.md
@@ -19,5 +19,6 @@ Some dependencies may have been modified or could be released by their author in
#### Modifications
+ - `ByteAnalysis`: Compiled from source with the newest dependency versions
+ - `APKTool`: Added the `apktool-cli` subproject, compiled without changes from source
- `JD-GUI`: Removed ASM, RSyntaxTextArea, ANTLR, and TreeLayout
- - `APKTool`: Recompiled with the newest dependency versions, removed prebuilt folder
diff --git a/libs/org/apktool/apktool-cli/2.6.0/apktool-cli-2.6.0.jar b/libs/org/apktool/apktool-cli/2.6.0/apktool-cli-2.6.0.jar
new file mode 100644
index 00000000..556872cc
Binary files /dev/null and b/libs/org/apktool/apktool-cli/2.6.0/apktool-cli-2.6.0.jar differ
diff --git a/libs/org/apktool/apktool-cli/2.6.0/apktool-cli-2.6.0.jar.md5 b/libs/org/apktool/apktool-cli/2.6.0/apktool-cli-2.6.0.jar.md5
new file mode 100644
index 00000000..45d4fc3d
--- /dev/null
+++ b/libs/org/apktool/apktool-cli/2.6.0/apktool-cli-2.6.0.jar.md5
@@ -0,0 +1 @@
+92750a855f488f5b90b4ee75352d53cc
\ No newline at end of file
diff --git a/libs/org/apktool/apktool-cli/2.6.0/apktool-cli-2.6.0.jar.sha1 b/libs/org/apktool/apktool-cli/2.6.0/apktool-cli-2.6.0.jar.sha1
new file mode 100644
index 00000000..efa647e2
--- /dev/null
+++ b/libs/org/apktool/apktool-cli/2.6.0/apktool-cli-2.6.0.jar.sha1
@@ -0,0 +1 @@
+f84f12d4a024aa00fa314229c748c971c984f8ae
\ No newline at end of file
diff --git a/libs/org/apktool/apktool/2.5.0bcv2/apktool-2.5.0bcv2.pom b/libs/org/apktool/apktool-cli/2.6.0/apktool-cli-2.6.0.pom
similarity index 83%
rename from libs/org/apktool/apktool/2.5.0bcv2/apktool-2.5.0bcv2.pom
rename to libs/org/apktool/apktool-cli/2.6.0/apktool-cli-2.6.0.pom
index 8e9dd343..8501e901 100644
--- a/libs/org/apktool/apktool/2.5.0bcv2/apktool-2.5.0bcv2.pom
+++ b/libs/org/apktool/apktool-cli/2.6.0/apktool-cli-2.6.0.pom
@@ -3,6 +3,6 @@
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
4.0.0
org.apktool
- apktool
- 2.5.0bcv2
+ apktool-cli
+ 2.6.0
diff --git a/libs/org/apktool/apktool-cli/2.6.0/apktool-cli-2.6.0.pom.md5 b/libs/org/apktool/apktool-cli/2.6.0/apktool-cli-2.6.0.pom.md5
new file mode 100644
index 00000000..8d7a1c84
--- /dev/null
+++ b/libs/org/apktool/apktool-cli/2.6.0/apktool-cli-2.6.0.pom.md5
@@ -0,0 +1 @@
+32d7606cd2e4eb5ec99cf13a1f623a2c
\ No newline at end of file
diff --git a/libs/org/apktool/apktool-cli/2.6.0/apktool-cli-2.6.0.pom.sha1 b/libs/org/apktool/apktool-cli/2.6.0/apktool-cli-2.6.0.pom.sha1
new file mode 100644
index 00000000..6e5d5881
--- /dev/null
+++ b/libs/org/apktool/apktool-cli/2.6.0/apktool-cli-2.6.0.pom.sha1
@@ -0,0 +1 @@
+b7c5e3e3a20e7601b18d45f594ecaf0d31e0047c
\ No newline at end of file
diff --git a/libs/org/apktool/apktool/maven-metadata.xml b/libs/org/apktool/apktool-cli/maven-metadata.xml
similarity index 51%
rename from libs/org/apktool/apktool/maven-metadata.xml
rename to libs/org/apktool/apktool-cli/maven-metadata.xml
index 25ecaadd..913576ca 100644
--- a/libs/org/apktool/apktool/maven-metadata.xml
+++ b/libs/org/apktool/apktool-cli/maven-metadata.xml
@@ -1,12 +1,12 @@
org.apktool
- apktool
+ apktool-cli
- 2.5.0bcv2
+ 2.6.0
- 2.5.0bcv2
+ 2.6.0
- 20210622201718
+ 20210916084410
diff --git a/libs/org/apktool/apktool-cli/maven-metadata.xml.md5 b/libs/org/apktool/apktool-cli/maven-metadata.xml.md5
new file mode 100644
index 00000000..9388c8f8
--- /dev/null
+++ b/libs/org/apktool/apktool-cli/maven-metadata.xml.md5
@@ -0,0 +1 @@
+5cf5e3c60d76f6bc05317852c0dee46c
\ No newline at end of file
diff --git a/libs/org/apktool/apktool-cli/maven-metadata.xml.sha1 b/libs/org/apktool/apktool-cli/maven-metadata.xml.sha1
new file mode 100644
index 00000000..65e6a541
--- /dev/null
+++ b/libs/org/apktool/apktool-cli/maven-metadata.xml.sha1
@@ -0,0 +1 @@
+33442f1de71c010486efa6d68d221cecd8bf185e
\ No newline at end of file
diff --git a/libs/org/apktool/apktool/2.5.0bcv2/apktool-2.5.0bcv2.jar b/libs/org/apktool/apktool/2.5.0bcv2/apktool-2.5.0bcv2.jar
deleted file mode 100644
index 050dfbb2..00000000
Binary files a/libs/org/apktool/apktool/2.5.0bcv2/apktool-2.5.0bcv2.jar and /dev/null differ
diff --git a/libs/org/apktool/apktool/2.5.0bcv2/apktool-2.5.0bcv2.jar.md5 b/libs/org/apktool/apktool/2.5.0bcv2/apktool-2.5.0bcv2.jar.md5
deleted file mode 100644
index bc05e1d4..00000000
--- a/libs/org/apktool/apktool/2.5.0bcv2/apktool-2.5.0bcv2.jar.md5
+++ /dev/null
@@ -1 +0,0 @@
-7d96a4ccc7289d0f0f476c618a6315a8
\ No newline at end of file
diff --git a/libs/org/apktool/apktool/2.5.0bcv2/apktool-2.5.0bcv2.jar.sha1 b/libs/org/apktool/apktool/2.5.0bcv2/apktool-2.5.0bcv2.jar.sha1
deleted file mode 100644
index 66e6dd8a..00000000
--- a/libs/org/apktool/apktool/2.5.0bcv2/apktool-2.5.0bcv2.jar.sha1
+++ /dev/null
@@ -1 +0,0 @@
-f3aad98eee64a34566ae6b971b59a3fb27c897a5
\ No newline at end of file
diff --git a/libs/org/apktool/apktool/2.5.0bcv2/apktool-2.5.0bcv2.pom.md5 b/libs/org/apktool/apktool/2.5.0bcv2/apktool-2.5.0bcv2.pom.md5
deleted file mode 100644
index a387559b..00000000
--- a/libs/org/apktool/apktool/2.5.0bcv2/apktool-2.5.0bcv2.pom.md5
+++ /dev/null
@@ -1 +0,0 @@
-f13d5769cd41299e8727973044de6326
\ No newline at end of file
diff --git a/libs/org/apktool/apktool/2.5.0bcv2/apktool-2.5.0bcv2.pom.sha1 b/libs/org/apktool/apktool/2.5.0bcv2/apktool-2.5.0bcv2.pom.sha1
deleted file mode 100644
index 78ff89b0..00000000
--- a/libs/org/apktool/apktool/2.5.0bcv2/apktool-2.5.0bcv2.pom.sha1
+++ /dev/null
@@ -1 +0,0 @@
-8750ebdb9af548b87d7f4597f65ca49262de7033
\ No newline at end of file
diff --git a/libs/org/apktool/apktool/maven-metadata.xml.md5 b/libs/org/apktool/apktool/maven-metadata.xml.md5
deleted file mode 100644
index 8f156188..00000000
--- a/libs/org/apktool/apktool/maven-metadata.xml.md5
+++ /dev/null
@@ -1 +0,0 @@
-04af915c4a9139dff66855fe769239f1
\ No newline at end of file
diff --git a/libs/org/apktool/apktool/maven-metadata.xml.sha1 b/libs/org/apktool/apktool/maven-metadata.xml.sha1
deleted file mode 100644
index 153be995..00000000
--- a/libs/org/apktool/apktool/maven-metadata.xml.sha1
+++ /dev/null
@@ -1 +0,0 @@
-1f365a9ab11f7213c747f379cf8d4220dc1b7fab
\ No newline at end of file
diff --git a/pom.xml b/pom.xml
index e1c2c6c9..8e81b994 100644
--- a/pom.xml
+++ b/pom.xml
@@ -14,7 +14,7 @@
22.0.0
- 2.5.0bcv2
+ 2.6.0
9.2
0.2.0
0.151
@@ -77,9 +77,20 @@
org.apktool
- apktool
+ apktool-cli
${apktool.version}
+
+ org.apktool
+ apktool-lib
+ ${apktool.version}
+
+
+ org.yaml
+ snakeyaml
+
+
+
org.ow2.asm
asm
@@ -360,6 +371,7 @@
${java.version}
+ true
diff --git a/src/main/java/the/bytecode/club/bytecodeviewer/GlobalHotKeys.java b/src/main/java/the/bytecode/club/bytecodeviewer/GlobalHotKeys.java
index 3bd050b2..d76d8852 100644
--- a/src/main/java/the/bytecode/club/bytecodeviewer/GlobalHotKeys.java
+++ b/src/main/java/the/bytecode/club/bytecodeviewer/GlobalHotKeys.java
@@ -44,7 +44,7 @@ public class GlobalHotKeys
//CTRL + O
//open resource
- if ((e.getKeyCode() == KeyEvent.VK_O) && ((e.getModifiers() & KeyEvent.CTRL_MASK) != 0))
+ if ((e.getKeyCode() == KeyEvent.VK_O) && ((e.getModifiersEx() & KeyEvent.CTRL_DOWN_MASK) != 0))
{
Configuration.lastHotKeyExecuted = System.currentTimeMillis();
@@ -62,7 +62,7 @@ public class GlobalHotKeys
//CTRL + N
//new workspace
- else if ((e.getKeyCode() == KeyEvent.VK_N) && ((e.getModifiers() & KeyEvent.CTRL_MASK) != 0))
+ else if ((e.getKeyCode() == KeyEvent.VK_N) && ((e.getModifiersEx() & KeyEvent.CTRL_DOWN_MASK) != 0))
{
Configuration.lastHotKeyExecuted = System.currentTimeMillis();
BytecodeViewer.resetWorkspace(true);
@@ -70,7 +70,7 @@ public class GlobalHotKeys
//CTRL + T
//compile
- else if ((e.getKeyCode() == KeyEvent.VK_T) && ((e.getModifiers() & KeyEvent.CTRL_MASK) != 0))
+ else if ((e.getKeyCode() == KeyEvent.VK_T) && ((e.getModifiersEx() & KeyEvent.CTRL_DOWN_MASK) != 0))
{
Configuration.lastHotKeyExecuted = System.currentTimeMillis();
Thread t = new Thread(() -> BytecodeViewer.compile(true, false), "Compile");
@@ -79,7 +79,7 @@ public class GlobalHotKeys
//CTRL + R
//Run remote code
- else if ((e.getKeyCode() == KeyEvent.VK_R) && ((e.getModifiers() & KeyEvent.CTRL_MASK) != 0))
+ else if ((e.getKeyCode() == KeyEvent.VK_R) && ((e.getModifiersEx() & KeyEvent.CTRL_DOWN_MASK) != 0))
{
Configuration.lastHotKeyExecuted = System.currentTimeMillis();
@@ -91,7 +91,7 @@ public class GlobalHotKeys
//CTRL + S
//Export resources
- else if ((e.getKeyCode() == KeyEvent.VK_S) && ((e.getModifiers() & KeyEvent.CTRL_MASK) != 0))
+ else if ((e.getKeyCode() == KeyEvent.VK_S) && ((e.getModifiersEx() & KeyEvent.CTRL_DOWN_MASK) != 0))
{
Configuration.lastHotKeyExecuted = System.currentTimeMillis();
@@ -137,7 +137,7 @@ public class GlobalHotKeys
//CTRL + W
//close active resource (currently opened tab)
- else if ((e.getKeyCode() == KeyEvent.VK_W) && ((e.getModifiers() & KeyEvent.CTRL_MASK) != 0))
+ else if ((e.getKeyCode() == KeyEvent.VK_W) && ((e.getModifiersEx() & KeyEvent.CTRL_DOWN_MASK) != 0))
{
Configuration.lastHotKeyExecuted = System.currentTimeMillis();
@@ -147,7 +147,7 @@ public class GlobalHotKeys
//CTRL + L
//open last opened resource
- else if ((e.getKeyCode() == KeyEvent.VK_L) && ((e.getModifiers() & KeyEvent.CTRL_MASK) != 0))
+ else if ((e.getKeyCode() == KeyEvent.VK_L) && ((e.getModifiersEx() & KeyEvent.CTRL_DOWN_MASK) != 0))
{
Configuration.lastHotKeyExecuted = System.currentTimeMillis();
diff --git a/src/main/java/the/bytecode/club/bytecodeviewer/api/ExceptionUI.java b/src/main/java/the/bytecode/club/bytecodeviewer/api/ExceptionUI.java
index 088e2593..c381b48c 100644
--- a/src/main/java/the/bytecode/club/bytecodeviewer/api/ExceptionUI.java
+++ b/src/main/java/the/bytecode/club/bytecodeviewer/api/ExceptionUI.java
@@ -134,8 +134,8 @@ public class ExceptionUI extends JFrameConsole
{
String fatJar = FAT_JAR ? " [Fat Jar]" : "";
- return TranslatedStrings.PLEASE_SEND_THIS_ERROR_LOG_TO.toString() + " " + author +
- "\n" + TranslatedStrings.PLEASE_SEND_RESOURCES.toString() +
+ return TranslatedStrings.PLEASE_SEND_THIS_ERROR_LOG_TO + " " + author +
+ "\n" + TranslatedStrings.PLEASE_SEND_RESOURCES +
"\nBytecode Viewer Version: " + VERSION + fatJar +
", OS: " + System.getProperty("os.name") +
", Java: " + System.getProperty("java.version");
diff --git a/src/main/java/the/bytecode/club/bytecodeviewer/decompilers/impl/JavapDisassembler.java b/src/main/java/the/bytecode/club/bytecodeviewer/decompilers/impl/JavapDisassembler.java
index 695829f5..23dce962 100644
--- a/src/main/java/the/bytecode/club/bytecodeviewer/decompilers/impl/JavapDisassembler.java
+++ b/src/main/java/the/bytecode/club/bytecodeviewer/decompilers/impl/JavapDisassembler.java
@@ -12,6 +12,7 @@ import the.bytecode.club.bytecodeviewer.Constants;
import the.bytecode.club.bytecodeviewer.decompilers.InternalDecompiler;
import the.bytecode.club.bytecodeviewer.gui.components.JFrameConsolePrintStream;
import the.bytecode.club.bytecodeviewer.resources.ExternalResources;
+import the.bytecode.club.bytecodeviewer.translation.TranslatedStrings;
import the.bytecode.club.bytecodeviewer.util.MiscUtils;
import static the.bytecode.club.bytecodeviewer.Constants.fs;
@@ -75,7 +76,6 @@ public class JavapDisassembler extends InternalDecompiler
//setup reflection
Class> javap = child.loadClass("com.sun.tools.javap.Main");
Method main = javap.getMethod("main", String[].class);
- Object cl = javap.newInstance();
//pipe sys out
sysOutBuffer = new JFrameConsolePrintStream("", false);
@@ -84,13 +84,17 @@ public class JavapDisassembler extends InternalDecompiler
BytecodeViewer.sm.silenceExec(true);
//invoke Javap
- main.invoke(cl, (Object) new String[]{
+ main.invoke(null, (Object) new String[]{
"-p", //Shows all classes and members
"-c", //Prints out disassembled code
//"-l", //Prints out line and local variable tables
"-constants", //Shows static final constants
tempClass.getAbsolutePath()});
}
+ catch (IllegalAccessException e)
+ {
+ return TranslatedStrings.ILLEGAL_ACCESS_ERROR.toString();
+ }
catch (Exception e)
{
e.printStackTrace();
diff --git a/src/main/java/the/bytecode/club/bytecodeviewer/gui/components/ExtendedJOptionPane.java b/src/main/java/the/bytecode/club/bytecodeviewer/gui/components/ExtendedJOptionPane.java
index 3b9b0dd5..c845b287 100644
--- a/src/main/java/the/bytecode/club/bytecodeviewer/gui/components/ExtendedJOptionPane.java
+++ b/src/main/java/the/bytecode/club/bytecodeviewer/gui/components/ExtendedJOptionPane.java
@@ -215,7 +215,7 @@ public class ExtendedJOptionPane
else
dialog.setLocationRelativeTo(BytecodeViewer.viewer);
- dialog.show();
+ dialog.setVisible(true);
dialog.dispose();
return dialog;
diff --git a/src/main/java/the/bytecode/club/bytecodeviewer/gui/components/SearchableJTextArea.java b/src/main/java/the/bytecode/club/bytecodeviewer/gui/components/SearchableJTextArea.java
index 586ab755..e26d042b 100644
--- a/src/main/java/the/bytecode/club/bytecodeviewer/gui/components/SearchableJTextArea.java
+++ b/src/main/java/the/bytecode/club/bytecodeviewer/gui/components/SearchableJTextArea.java
@@ -82,7 +82,7 @@ public class SearchableJTextArea extends JTextArea
addKeyListener(new PressKeyListener(keyEvent ->
{
- if ((keyEvent.getKeyCode() == KeyEvent.VK_F) && ((keyEvent.getModifiers() & KeyEvent.CTRL_MASK) != 0))
+ if ((keyEvent.getKeyCode() == KeyEvent.VK_F) && ((keyEvent.getModifiersEx() & KeyEvent.CTRL_DOWN_MASK) != 0))
searchInput.requestFocus();
GlobalHotKeys.keyPressed(keyEvent);
diff --git a/src/main/java/the/bytecode/club/bytecodeviewer/gui/components/SearchableRSyntaxTextArea.java b/src/main/java/the/bytecode/club/bytecodeviewer/gui/components/SearchableRSyntaxTextArea.java
index c9c1aedc..ae88d89b 100644
--- a/src/main/java/the/bytecode/club/bytecodeviewer/gui/components/SearchableRSyntaxTextArea.java
+++ b/src/main/java/the/bytecode/club/bytecodeviewer/gui/components/SearchableRSyntaxTextArea.java
@@ -108,10 +108,10 @@ public class SearchableRSyntaxTextArea extends RSyntaxTextArea
addKeyListener(new PressKeyListener(keyEvent ->
{
- if ((keyEvent.getKeyCode() == KeyEvent.VK_F) && ((keyEvent.getModifiers() & KeyEvent.CTRL_MASK) != 0))
+ if ((keyEvent.getKeyCode() == KeyEvent.VK_F) && ((keyEvent.getModifiersEx() & KeyEvent.CTRL_DOWN_MASK) != 0))
searchInput.requestFocus();
- if (onCtrlS != null && (keyEvent.getKeyCode() == KeyEvent.VK_S) && ((keyEvent.getModifiers() & KeyEvent.CTRL_MASK) != 0))
+ if (onCtrlS != null && (keyEvent.getKeyCode() == KeyEvent.VK_S) && ((keyEvent.getModifiersEx() & KeyEvent.CTRL_DOWN_MASK) != 0))
{
onCtrlS.run();
return;
diff --git a/src/main/java/the/bytecode/club/bytecodeviewer/gui/resourceviewer/TabbedPane.java b/src/main/java/the/bytecode/club/bytecodeviewer/gui/resourceviewer/TabbedPane.java
index d205aa7f..52171c52 100644
--- a/src/main/java/the/bytecode/club/bytecodeviewer/gui/resourceviewer/TabbedPane.java
+++ b/src/main/java/the/bytecode/club/bytecodeviewer/gui/resourceviewer/TabbedPane.java
@@ -101,7 +101,7 @@ public class TabbedPane extends JPanel
exitButton.setComponentPopupMenu(rightClickMenu);
exitButton.addMouseListener(new MouseClickedListener(e ->
{
- if (e.getModifiers() != InputEvent.ALT_MASK || System.currentTimeMillis() - lastMouseClick < 100)
+ if (e.getModifiersEx() != InputEvent.ALT_DOWN_MASK || System.currentTimeMillis() - lastMouseClick < 100)
return;
lastMouseClick = System.currentTimeMillis();
diff --git a/src/main/java/the/bytecode/club/bytecodeviewer/plugin/preinstalled/EZInjection.java b/src/main/java/the/bytecode/club/bytecodeviewer/plugin/preinstalled/EZInjection.java
index 9b8bce85..e7699572 100644
--- a/src/main/java/the/bytecode/club/bytecodeviewer/plugin/preinstalled/EZInjection.java
+++ b/src/main/java/the/bytecode/club/bytecodeviewer/plugin/preinstalled/EZInjection.java
@@ -299,7 +299,7 @@ public class EZInjection extends Plugin
if(kit != null)
kit.setVisible(true);
- m2.invoke(classNode.getClass().newInstance(), (Object[]) new String[1]);
+ m2.invoke(classNode.getClass().getDeclaredConstructor().newInstance(), (Object[]) new String[1]);
print("Finished running " + invokeMethodInformation);
}
diff --git a/src/main/java/the/bytecode/club/bytecodeviewer/plugin/strategies/CompiledJavaPluginLaunchStrategy.java b/src/main/java/the/bytecode/club/bytecodeviewer/plugin/strategies/CompiledJavaPluginLaunchStrategy.java
index 7290ec92..110f76b5 100644
--- a/src/main/java/the/bytecode/club/bytecodeviewer/plugin/strategies/CompiledJavaPluginLaunchStrategy.java
+++ b/src/main/java/the/bytecode/club/bytecodeviewer/plugin/strategies/CompiledJavaPluginLaunchStrategy.java
@@ -61,7 +61,7 @@ public class CompiledJavaPluginLaunchStrategy implements PluginLaunchStrategy {
}
LoadingClassLoader cl = new LoadingClassLoader(pdata, set);
- Plugin p = cl.pluginKlass.newInstance();
+ Plugin p = cl.pluginKlass.getDeclaredConstructor().newInstance();
LoadedPluginData npdata = new LoadedPluginData(pdata, cl, p);
loaded.add(npdata);
@@ -197,4 +197,4 @@ public class CompiledJavaPluginLaunchStrategy implements PluginLaunchStrategy {
return pluginKlass;
}
}
-}
\ No newline at end of file
+}
diff --git a/src/main/java/the/bytecode/club/bytecodeviewer/plugin/strategies/JavaPluginLaunchStrategy.java b/src/main/java/the/bytecode/club/bytecodeviewer/plugin/strategies/JavaPluginLaunchStrategy.java
index 17bf4009..a3db6b8a 100644
--- a/src/main/java/the/bytecode/club/bytecodeviewer/plugin/strategies/JavaPluginLaunchStrategy.java
+++ b/src/main/java/the/bytecode/club/bytecodeviewer/plugin/strategies/JavaPluginLaunchStrategy.java
@@ -51,6 +51,6 @@ public class JavaPluginLaunchStrategy implements PluginLaunchStrategy
);
//create a new instance of the class
- return (Plugin) clazz.newInstance();
+ return (Plugin) clazz.getDeclaredConstructor().newInstance();
}
-}
\ No newline at end of file
+}
diff --git a/src/main/java/the/bytecode/club/bytecodeviewer/translation/TranslatedStrings.java b/src/main/java/the/bytecode/club/bytecodeviewer/translation/TranslatedStrings.java
index 52a4ad1e..f056dea0 100644
--- a/src/main/java/the/bytecode/club/bytecodeviewer/translation/TranslatedStrings.java
+++ b/src/main/java/the/bytecode/club/bytecodeviewer/translation/TranslatedStrings.java
@@ -84,6 +84,7 @@ public enum TranslatedStrings
PLEASE_SEND_THIS_ERROR_LOG_TO,
PLEASE_SEND_RESOURCES,
ONE_PLUGIN_AT_A_TIME,
+ ILLEGAL_ACCESS_ERROR,
YES,
diff --git a/src/main/resources/translations/english.json b/src/main/resources/translations/english.json
index cf7aa961..64c5f1b3 100644
--- a/src/main/resources/translations/english.json
+++ b/src/main/resources/translations/english.json
@@ -263,6 +263,7 @@
"PLEASE_SEND_THIS_ERROR_LOG_TO": "Please send this error log to",
"PLEASE_SEND_RESOURCES": "If you hold appropriate legal rights to the relevant class/jar/apk file please include that as well.",
"ONE_PLUGIN_AT_A_TIME": "There is currently another plugin running right now, please wait for that to finish executing.",
+ "ILLEGAL_ACCESS_ERROR": "Please use Java 15 or older to do this.",
"FILES": "Files",
diff --git a/src/main/resources/translations/german.json b/src/main/resources/translations/german.json
index 9f40eb6b..9df1caeb 100644
--- a/src/main/resources/translations/german.json
+++ b/src/main/resources/translations/german.json
@@ -255,5 +255,6 @@
"CLOSE_TAB": "Tab schließen",
"PLEASE_SEND_THIS_ERROR_LOG_TO": "Bitte senden Sie dieses Fehlerprotokoll an",
"PLEASE_SEND_RESOURCES": "Wenn Sie entsprechende gesetzliche Rechte an der jeweiligen Klasse besitzen",
- "MIN_SDK_VERSION": "Minimale SDK-Version"
+ "MIN_SDK_VERSION": "Minimale SDK-Version",
+ "ILLEGAL_ACCESS_ERROR": "Bitte benutzen Sie Java 15 oder älter, um dies zu tun."
}