diff --git a/.gitignore b/.gitignore
index a000a40..ba23272 100644
--- a/.gitignore
+++ b/.gitignore
@@ -18,3 +18,5 @@
/app/src/androidTest/java/com/uiui/videoplayer/
/library/build/
/JZVideo/build/
+/ui/video-encryptor/.idea/
+/ui/video-encryptor/target/
diff --git a/ui/video-encryptor/native_build.bat b/ui/video-encryptor/native_build.bat
new file mode 100644
index 0000000..eaec3fc
--- /dev/null
+++ b/ui/video-encryptor/native_build.bat
@@ -0,0 +1,2 @@
+SET class_path=target/video-encryptor-1.0-SNAPSHOT.jar;
+native-image --no-fallback -H:ConfigurationFileDirectories=META-INF/native-image --allow-incomplete-classpath -classpath %class_path% com.penngo.gralvm.MainSwing
\ No newline at end of file
diff --git a/ui/video-encryptor/native_build_all.bat b/ui/video-encryptor/native_build_all.bat
new file mode 100644
index 0000000..58a7b3e
--- /dev/null
+++ b/ui/video-encryptor/native_build_all.bat
@@ -0,0 +1,7 @@
+@REM 使用idea 的mvn clean package
+
+java -agentlib:native-image-agent=config-output-dir=./META-INF/native-image -jar video-encryptor-1.0.jar
+
+native-image -jar target\video-encryptor-1.0.jar --no-fallback -H:ConfigurationFileDirectories=.\src\main\resources\META-INF\native-image
+
+"C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\bin\editbin.exe" /SUBSYSTEM:WINDOWS video-encryptor-1.0.exe
diff --git a/ui/video-encryptor/pom.xml b/ui/video-encryptor/pom.xml
new file mode 100644
index 0000000..9c661df
--- /dev/null
+++ b/ui/video-encryptor/pom.xml
@@ -0,0 +1,73 @@
+
+
+ 4.0.0
+
+ com.hainaos
+ video-encryptor
+ 1.0
+
+
+ 17
+ 17
+ UTF-8
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-compiler-plugin
+ 3.8.1
+
+ ${maven.compiler.source}
+ ${maven.compiler.target}
+
+
+
+ org.apache.maven.plugins
+ maven-shade-plugin
+ 3.4.1
+
+
+ package
+
+ shade
+
+
+
+
+ com.hnos.video.VideoEncryptorGUI
+
+
+
+
+
+
+
+ org.graalvm.buildtools
+ native-maven-plugin
+ 0.10.2
+ true
+
+
+ build-native
+
+ compile-no-fork
+
+ package
+
+
+
+ VideoEncryptor
+ com.hnos.video.VideoEncryptorGUI
+
+ --no-fallback
+
+
+
+
+
+
\ No newline at end of file
diff --git a/ui/video-encryptor/src/main/java/com/hnos/video/VideoEncryptor.java b/ui/video-encryptor/src/main/java/com/hnos/video/VideoEncryptor.java
new file mode 100644
index 0000000..03168af
--- /dev/null
+++ b/ui/video-encryptor/src/main/java/com/hnos/video/VideoEncryptor.java
@@ -0,0 +1,29 @@
+package com.hnos.video;
+
+import javax.crypto.Cipher;
+import javax.crypto.CipherOutputStream;
+import javax.crypto.spec.IvParameterSpec;
+import javax.crypto.spec.SecretKeySpec;
+import java.io.*;
+
+public class VideoEncryptor {
+ private static final String ALGORITHM = "AES/CTR/NoPadding";
+
+ public static void encryptFile(File inputFile, File outputFile, byte[] key, byte[] iv) throws Exception {
+ Cipher cipher = Cipher.getInstance(ALGORITHM);
+ SecretKeySpec keySpec = new SecretKeySpec(key, "AES");
+ IvParameterSpec ivSpec = new IvParameterSpec(iv);
+ cipher.init(Cipher.ENCRYPT_MODE, keySpec, ivSpec);
+
+ try (FileInputStream fis = new FileInputStream(inputFile);
+ FileOutputStream fos = new FileOutputStream(outputFile);
+ CipherOutputStream cos = new CipherOutputStream(fos, cipher)) {
+
+ byte[] buffer = new byte[8192];
+ int read;
+ while ((read = fis.read(buffer)) != -1) {
+ cos.write(buffer, 0, read);
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/ui/video-encryptor/src/main/java/com/hnos/video/VideoEncryptorGUI.java b/ui/video-encryptor/src/main/java/com/hnos/video/VideoEncryptorGUI.java
new file mode 100644
index 0000000..59cb99b
--- /dev/null
+++ b/ui/video-encryptor/src/main/java/com/hnos/video/VideoEncryptorGUI.java
@@ -0,0 +1,365 @@
+package com.hnos.video;
+import javax.crypto.Cipher;
+import javax.crypto.CipherOutputStream;
+import javax.crypto.spec.IvParameterSpec;
+import javax.crypto.spec.SecretKeySpec;
+import javax.swing.*;
+import java.awt.*;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.util.Arrays;
+import java.util.List;
+import java.util.concurrent.ExecutionException;
+
+/**
+ * 视频加密工具GUI
+ * 支持单文件加密和目录下所有视频文件批量加密
+ * 加密后文件扩展名改为.hnv
+ */
+public class VideoEncryptorGUI extends JFrame {
+ // 加密算法常量(保持和VideoEncryptor一致)
+ private static final String ALGORITHM = "AES/CTR/NoPadding";
+ // 视频文件扩展名列表(可根据需要扩展)
+ private static final List VIDEO_EXTENSIONS = Arrays.asList("mp4", "avi", "mov", "mkv", "flv", "wmv",
+ "rmvb");
+ // 测试用AES密钥(16字节,AES-128),实际使用请替换为安全生成的密钥
+ private static final byte[] TEST_KEY = "1234567890123456".getBytes();
+ // 测试用IV向量(16字节,CTR模式要求IV长度等于块大小),实际使用请随机生成
+ private static final byte[] TEST_IV = "1234567890123456".getBytes();
+
+ public VideoEncryptorGUI() {
+ // 初始化窗口
+ initFrame();
+ // 初始化界面组件
+ initComponents();
+ }
+
+ /**
+ * 初始化窗口基本属性
+ */
+ private void initFrame() {
+ setTitle("视频加密工具");
+ setSize(350, 400);
+ setDefaultCloseOperation(EXIT_ON_CLOSE);
+ setLocationRelativeTo(null); // 居中显示
+ setResizable(false); // 固定窗口大小
+ }
+
+ // 输入框组件
+ private JTextField keyField;
+ private JTextField ivField;
+ // 状态文本框
+ private JTextField statusField;
+ // 转换按钮
+ private JButton convertBtn;
+ // 选中的文件或目录
+ private File selectedFile;
+ private File selectedDir;
+
+ /**
+ * 初始化界面组件(按钮、布局等)
+ */
+ private void initComponents() {
+ // 创建面板和设置布局
+ JPanel panel = new JPanel();
+ panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS));
+ panel.setBorder(BorderFactory.createEmptyBorder(20, 40, 20, 40));
+
+ // 创建选择按钮
+ JButton selectFileBtn = new JButton("选择单个视频文件");
+ JButton selectDirBtn = new JButton("选择目录(批量加密)");
+
+ // 设置按钮大小
+ Dimension btnSize = new Dimension(200, 30);
+ selectFileBtn.setPreferredSize(btnSize);
+ selectDirBtn.setPreferredSize(btnSize);
+
+ // 添加按钮事件监听
+ selectFileBtn.addActionListener(e -> selectSingleFile());
+ selectDirBtn.addActionListener(e -> selectDirectory());
+
+ // 创建输入框标签
+ JLabel keyLabel = new JLabel("密钥 (16字节):");
+ JLabel ivLabel = new JLabel("IV向量 (16字节):");
+
+ // 创建输入框
+ keyField = new JTextField("hainaos_key_123_", 20);
+ ivField = new JTextField("hainaos1hainaos1", 20);
+
+ // 创建转换按钮
+ convertBtn = new JButton("开始转换");
+ convertBtn.setPreferredSize(btnSize);
+ convertBtn.addActionListener(e -> startConversion());
+
+ // 创建状态文本框
+ statusField = new JTextField("准备就绪");
+ statusField.setPreferredSize(btnSize);
+ statusField.setEditable(false);
+ statusField.setHorizontalAlignment(JTextField.CENTER);
+
+ // 添加组件到面板(垂直排列)
+ panel.add(selectFileBtn);
+ panel.add(Box.createVerticalStrut(10)); // 垂直间距
+ panel.add(selectDirBtn);
+ panel.add(Box.createVerticalStrut(20)); // 垂直间距
+ panel.add(keyLabel);
+ panel.add(keyField);
+ panel.add(Box.createVerticalStrut(10)); // 垂直间距
+ panel.add(ivLabel);
+ panel.add(ivField);
+ panel.add(Box.createVerticalStrut(20)); // 垂直间距
+ panel.add(convertBtn);
+ panel.add(Box.createVerticalStrut(10)); // 垂直间距
+ panel.add(statusField);
+
+ // 添加面板到窗口
+ add(panel);
+ }
+
+ /**
+ * 选择单个视频文件
+ */
+ private void selectSingleFile() {
+ JFileChooser fileChooser = new JFileChooser();
+ fileChooser.setFileSelectionMode(JFileChooser.FILES_ONLY);
+ fileChooser.setDialogTitle("选择要加密的视频文件");
+
+ // 过滤视频文件
+ fileChooser.setFileFilter(new javax.swing.filechooser.FileFilter() {
+ @Override
+ public boolean accept(File f) {
+ if (f.isDirectory())
+ return true;
+ String ext = getFileExtension(f);
+ return VIDEO_EXTENSIONS.contains(ext.toLowerCase());
+ }
+
+ @Override
+ public String getDescription() {
+ return "视频文件 (" + String.join(", ", VIDEO_EXTENSIONS) + ")";
+ }
+ });
+
+ int result = fileChooser.showOpenDialog(this);
+ if (result == JFileChooser.APPROVE_OPTION) {
+ selectedFile = fileChooser.getSelectedFile();
+ selectedDir = null; // 清除目录选择
+ JOptionPane.showMessageDialog(this, "已选择文件:" + selectedFile.getName(), "选择成功", JOptionPane.INFORMATION_MESSAGE);
+ }
+ }
+
+ /**
+ * 选择目录
+ */
+ private void selectDirectory() {
+ JFileChooser dirChooser = new JFileChooser();
+ dirChooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
+ dirChooser.setDialogTitle("选择要批量加密的目录");
+
+ int result = dirChooser.showOpenDialog(this);
+ if (result == JFileChooser.APPROVE_OPTION) {
+ selectedDir = dirChooser.getSelectedFile();
+ selectedFile = null; // 清除文件选择
+ JOptionPane.showMessageDialog(this, "已选择目录:" + selectedDir.getName(), "选择成功", JOptionPane.INFORMATION_MESSAGE);
+ }
+ }
+
+ /**
+ * 开始转换过程
+ */
+ private void startConversion() {
+ // 检查是否选择了文件或目录
+ if (selectedFile == null && selectedDir == null) {
+ JOptionPane.showMessageDialog(this, "请先选择要加密的文件或目录!", "错误", JOptionPane.ERROR_MESSAGE);
+ return;
+ }
+
+ // 获取用户输入的key和iv
+ String keyStr = keyField.getText();
+ String ivStr = ivField.getText();
+
+ // 验证key和iv的长度
+ if (keyStr.length() != 16) {
+ JOptionPane.showMessageDialog(this, "密钥长度必须为16字节!", "错误", JOptionPane.ERROR_MESSAGE);
+ return;
+ }
+ if (ivStr.length() != 16) {
+ JOptionPane.showMessageDialog(this, "IV向量长度必须为16字节!", "错误", JOptionPane.ERROR_MESSAGE);
+ return;
+ }
+
+ // 禁用转换按钮并更新状态
+ convertBtn.setEnabled(false);
+ statusField.setText("转换中...");
+
+ // 转换为字节数组
+ byte[] key = keyStr.getBytes();
+ byte[] iv = ivStr.getBytes();
+
+ // 根据选择的是文件还是目录,开始加密
+ if (selectedFile != null) {
+ File targetFile = getEncryptedFile(selectedFile);
+ encryptFileAsync(selectedFile, targetFile, key, iv);
+ } else if (selectedDir != null) {
+ traverseAndEncryptDir(selectedDir, key, iv);
+ }
+ }
+
+ /**
+ * 遍历目录下所有视频文件并加密
+ */
+ private void traverseAndEncryptDir(File dir, byte[] key, byte[] iv) {
+ if (!dir.isDirectory()) {
+ JOptionPane.showMessageDialog(this, "选择的不是有效目录!", "错误", JOptionPane.ERROR_MESSAGE);
+ convertBtn.setEnabled(true);
+ statusField.setText("准备就绪");
+ return;
+ }
+
+ File[] files = dir.listFiles();
+ if (files == null || files.length == 0) {
+ JOptionPane.showMessageDialog(this, "目录下无文件!", "提示", JOptionPane.INFORMATION_MESSAGE);
+ convertBtn.setEnabled(true);
+ statusField.setText("准备就绪");
+ return;
+ }
+
+ // 批量加密(使用SwingWorker避免UI卡顿)
+ new SwingWorker() {
+ @Override
+ protected Void doInBackground() throws Exception {
+ for (File file : files) {
+ if (file.isFile()) {
+ String ext = getFileExtension(file);
+ // 只处理视频文件
+ if (VIDEO_EXTENSIONS.contains(ext.toLowerCase())) {
+ File targetFile = getEncryptedFile(file);
+ VideoEncryptor.encryptFile(file, targetFile, key, iv);
+ publish(file); // 发布进度
+ }
+ }
+ }
+ return null;
+ }
+
+ @Override
+ protected void process(List chunks) {
+ // 显示当前加密的文件(可选)
+ File lastFile = chunks.get(chunks.size() - 1);
+ System.out.println("已加密: " + lastFile.getName());
+ }
+
+ @Override
+ protected void done() {
+ try {
+ get(); // 捕获后台异常
+ JOptionPane.showMessageDialog(VideoEncryptorGUI.this,
+ "目录下所有视频文件加密完成!", "完成", JOptionPane.INFORMATION_MESSAGE);
+ statusField.setText("转换完成");
+ } catch (InterruptedException | ExecutionException e) {
+ JOptionPane.showMessageDialog(VideoEncryptorGUI.this,
+ "加密失败:" + e.getCause().getMessage(),
+ "错误", JOptionPane.ERROR_MESSAGE);
+ statusField.setText("转换失败");
+ } finally {
+ convertBtn.setEnabled(true);
+ }
+ }
+ }.execute();
+ }
+
+ /**
+ * 异步加密单个文件(避免UI卡顿)
+ */
+ private void encryptFileAsync(File sourceFile, File targetFile, byte[] key, byte[] iv) {
+ new SwingWorker() {
+ @Override
+ protected Void doInBackground() throws Exception {
+ VideoEncryptor.encryptFile(sourceFile, targetFile, key, iv);
+ return null;
+ }
+
+ @Override
+ protected void done() {
+ try {
+ get(); // 捕获后台异常
+ JOptionPane.showMessageDialog(VideoEncryptorGUI.this,
+ "文件加密成功!\n输出路径:" + targetFile.getAbsolutePath(),
+ "成功", JOptionPane.INFORMATION_MESSAGE);
+ statusField.setText("转换完成");
+ } catch (InterruptedException | ExecutionException e) {
+ JOptionPane.showMessageDialog(VideoEncryptorGUI.this,
+ "加密失败:" + e.getCause().getMessage(),
+ "错误", JOptionPane.ERROR_MESSAGE);
+ statusField.setText("转换失败");
+ } finally {
+ convertBtn.setEnabled(true);
+ }
+ }
+ }.execute();
+ }
+
+ /**
+ * 获取加密后的目标文件(替换扩展名为.hnv)
+ */
+ private File getEncryptedFile(File sourceFile) {
+ String parentPath = sourceFile.getParent();
+ String fileName = sourceFile.getName();
+ String nameWithoutExt = fileName.substring(0, fileName.lastIndexOf("."));
+ return new File(parentPath + File.separator + nameWithoutExt + ".hnv");
+ }
+
+ /**
+ * 获取文件扩展名
+ */
+ private String getFileExtension(File file) {
+ String name = file.getName();
+ int lastDotIndex = name.lastIndexOf(".");
+ if (lastDotIndex == -1)
+ return "";
+ return name.substring(lastDotIndex + 1);
+ }
+
+ /**
+ * 加密核心类(原VideoEncryptor)
+ */
+ static class VideoEncryptor {
+ private static final String ALGORITHM = "AES/CTR/NoPadding";
+
+ public static void encryptFile(File inputFile, File outputFile, byte[] key, byte[] iv) throws Exception {
+ Cipher cipher = Cipher.getInstance(ALGORITHM);
+ SecretKeySpec keySpec = new SecretKeySpec(key, "AES");
+ IvParameterSpec ivSpec = new IvParameterSpec(iv);
+ cipher.init(Cipher.ENCRYPT_MODE, keySpec, ivSpec);
+
+ try (FileInputStream fis = new FileInputStream(inputFile);
+ FileOutputStream fos = new FileOutputStream(outputFile);
+ CipherOutputStream cos = new CipherOutputStream(fos, cipher)) {
+
+ byte[] buffer = new byte[8192];
+ int read;
+ while ((read = fis.read(buffer)) != -1) {
+ cos.write(buffer, 0, read);
+ }
+ }
+ }
+ }
+
+ /**
+ * 程序入口
+ */
+ public static void main(String[] args) {
+ // 判断是否为native运行环境
+ String classPath = System.getProperty("java.class.path");
+ if(classPath == null || classPath.isBlank()) {
+ System.setProperty("java.home", ".");
+ }
+
+ // Swing界面需在EDT线程中运行
+ SwingUtilities.invokeLater(() -> {
+ VideoEncryptorGUI gui = new VideoEncryptorGUI();
+ gui.setVisible(true);
+ });
+ }
+}
\ No newline at end of file
diff --git a/ui/video-encryptor/src/main/resources/META-INF/native-image/jni-config.json b/ui/video-encryptor/src/main/resources/META-INF/native-image/jni-config.json
new file mode 100644
index 0000000..deb97bd
--- /dev/null
+++ b/ui/video-encryptor/src/main/resources/META-INF/native-image/jni-config.json
@@ -0,0 +1,2102 @@
+[
+ {
+ "name": "[Ljava.util.Locale;"
+ },
+ {
+ "name": "[Lsun.awt.shell.ShellFolderColumnInfo;"
+ },
+ {
+ "name": "[Lsun.java2d.loops.GraphicsPrimitive;"
+ },
+ {
+ "name": "com.hnos.video.VideoEncryptorGUI",
+ "methods": [
+ {
+ "name": "main",
+ "parameterTypes": [
+ "java.lang.String[]"
+ ]
+ }
+ ]
+ },
+ {
+ "name": "java.awt.AWTEvent",
+ "fields": [
+ {
+ "name": "bdata"
+ },
+ {
+ "name": "consumed"
+ },
+ {
+ "name": "id"
+ }
+ ]
+ },
+ {
+ "name": "java.awt.AlphaComposite",
+ "fields": [
+ {
+ "name": "extraAlpha"
+ },
+ {
+ "name": "rule"
+ }
+ ]
+ },
+ {
+ "name": "java.awt.Color",
+ "methods": [
+ {
+ "name": "getRGB",
+ "parameterTypes": []
+ }
+ ]
+ },
+ {
+ "name": "java.awt.Component",
+ "fields": [
+ {
+ "name": "appContext"
+ },
+ {
+ "name": "background"
+ },
+ {
+ "name": "cursor"
+ },
+ {
+ "name": "enabled"
+ },
+ {
+ "name": "focusable"
+ },
+ {
+ "name": "foreground"
+ },
+ {
+ "name": "graphicsConfig"
+ },
+ {
+ "name": "height"
+ },
+ {
+ "name": "parent"
+ },
+ {
+ "name": "peer"
+ },
+ {
+ "name": "visible"
+ },
+ {
+ "name": "width"
+ },
+ {
+ "name": "x"
+ },
+ {
+ "name": "y"
+ }
+ ],
+ "methods": [
+ {
+ "name": "getFont_NoClientCode",
+ "parameterTypes": []
+ },
+ {
+ "name": "getLocationOnScreen_NoTreeLock",
+ "parameterTypes": []
+ },
+ {
+ "name": "getToolkitImpl",
+ "parameterTypes": []
+ },
+ {
+ "name": "isEnabledImpl",
+ "parameterTypes": []
+ }
+ ]
+ },
+ {
+ "name": "java.awt.Container",
+ "fields": [
+ {
+ "name": "layoutMgr"
+ }
+ ]
+ },
+ {
+ "name": "java.awt.Cursor",
+ "fields": [
+ {
+ "name": "pData"
+ },
+ {
+ "name": "type"
+ }
+ ],
+ "methods": [
+ {
+ "name": "setPData",
+ "parameterTypes": [
+ "long"
+ ]
+ }
+ ]
+ },
+ {
+ "name": "java.awt.Dialog",
+ "fields": [
+ {
+ "name": "title"
+ },
+ {
+ "name": "undecorated"
+ }
+ ]
+ },
+ {
+ "name": "java.awt.Dimension",
+ "fields": [
+ {
+ "name": "height"
+ },
+ {
+ "name": "width"
+ }
+ ]
+ },
+ {
+ "name": "java.awt.Font",
+ "fields": [
+ {
+ "name": "name"
+ },
+ {
+ "name": "pData"
+ },
+ {
+ "name": "size"
+ },
+ {
+ "name": "style"
+ }
+ ],
+ "methods": [
+ {
+ "name": "getFont",
+ "parameterTypes": [
+ "java.lang.String"
+ ]
+ },
+ {
+ "name": "getFontPeer",
+ "parameterTypes": []
+ }
+ ]
+ },
+ {
+ "name": "java.awt.FontMetrics",
+ "fields": [
+ {
+ "name": "font"
+ }
+ ],
+ "methods": [
+ {
+ "name": "getHeight",
+ "parameterTypes": []
+ }
+ ]
+ },
+ {
+ "name": "java.awt.Frame",
+ "fields": [
+ {
+ "name": "undecorated"
+ }
+ ]
+ },
+ {
+ "name": "java.awt.Insets",
+ "fields": [
+ {
+ "name": "bottom"
+ },
+ {
+ "name": "left"
+ },
+ {
+ "name": "right"
+ },
+ {
+ "name": "top"
+ }
+ ],
+ "methods": [
+ {
+ "name": "",
+ "parameterTypes": [
+ "int",
+ "int",
+ "int",
+ "int"
+ ]
+ }
+ ]
+ },
+ {
+ "name": "java.awt.Point",
+ "fields": [
+ {
+ "name": "x"
+ },
+ {
+ "name": "y"
+ }
+ ],
+ "methods": [
+ {
+ "name": "",
+ "parameterTypes": [
+ "int",
+ "int"
+ ]
+ }
+ ]
+ },
+ {
+ "name": "java.awt.Rectangle",
+ "methods": [
+ {
+ "name": "",
+ "parameterTypes": [
+ "int",
+ "int",
+ "int",
+ "int"
+ ]
+ }
+ ]
+ },
+ {
+ "name": "java.awt.SequencedEvent",
+ "methods": [
+ {
+ "name": "",
+ "parameterTypes": [
+ "java.awt.AWTEvent"
+ ]
+ }
+ ]
+ },
+ {
+ "name": "java.awt.Toolkit",
+ "methods": [
+ {
+ "name": "getDefaultToolkit",
+ "parameterTypes": []
+ },
+ {
+ "name": "getFontMetrics",
+ "parameterTypes": [
+ "java.awt.Font"
+ ]
+ }
+ ]
+ },
+ {
+ "name": "java.awt.Window",
+ "fields": [
+ {
+ "name": "autoRequestFocus"
+ },
+ {
+ "name": "locationByPlatform"
+ },
+ {
+ "name": "securityWarningHeight"
+ },
+ {
+ "name": "securityWarningWidth"
+ },
+ {
+ "name": "warningString"
+ }
+ ],
+ "methods": [
+ {
+ "name": "calculateSecurityWarningPosition",
+ "parameterTypes": [
+ "double",
+ "double",
+ "double",
+ "double"
+ ]
+ },
+ {
+ "name": "getWarningString",
+ "parameterTypes": []
+ }
+ ]
+ },
+ {
+ "name": "java.awt.Window$Type"
+ },
+ {
+ "name": "java.awt.desktop.UserSessionEvent$Reason",
+ "fields": [
+ {
+ "name": "CONSOLE"
+ },
+ {
+ "name": "LOCK"
+ },
+ {
+ "name": "REMOTE"
+ },
+ {
+ "name": "UNSPECIFIED"
+ }
+ ]
+ },
+ {
+ "name": "java.awt.event.ComponentEvent",
+ "methods": [
+ {
+ "name": "",
+ "parameterTypes": [
+ "java.awt.Component",
+ "int"
+ ]
+ }
+ ]
+ },
+ {
+ "name": "java.awt.event.InputEvent",
+ "fields": [
+ {
+ "name": "modifiers"
+ }
+ ],
+ "methods": [
+ {
+ "name": "getButtonDownMasks",
+ "parameterTypes": []
+ }
+ ]
+ },
+ {
+ "name": "java.awt.event.KeyEvent",
+ "fields": [
+ {
+ "name": "extendedKeyCode"
+ },
+ {
+ "name": "keyChar"
+ },
+ {
+ "name": "keyCode"
+ },
+ {
+ "name": "primaryLevelUnicode"
+ },
+ {
+ "name": "rawCode"
+ },
+ {
+ "name": "scancode"
+ }
+ ],
+ "methods": [
+ {
+ "name": "",
+ "parameterTypes": [
+ "java.awt.Component",
+ "int",
+ "long",
+ "int",
+ "int",
+ "char",
+ "int"
+ ]
+ }
+ ]
+ },
+ {
+ "name": "java.awt.event.MouseEvent",
+ "fields": [
+ {
+ "name": "button"
+ },
+ {
+ "name": "causedByTouchEvent"
+ },
+ {
+ "name": "x"
+ },
+ {
+ "name": "y"
+ }
+ ],
+ "methods": [
+ {
+ "name": "",
+ "parameterTypes": [
+ "java.awt.Component",
+ "int",
+ "long",
+ "int",
+ "int",
+ "int",
+ "int",
+ "int",
+ "int",
+ "boolean",
+ "int"
+ ]
+ }
+ ]
+ },
+ {
+ "name": "java.awt.geom.AffineTransform",
+ "fields": [
+ {
+ "name": "m00"
+ },
+ {
+ "name": "m01"
+ },
+ {
+ "name": "m02"
+ },
+ {
+ "name": "m10"
+ },
+ {
+ "name": "m11"
+ },
+ {
+ "name": "m12"
+ }
+ ]
+ },
+ {
+ "name": "java.awt.geom.GeneralPath",
+ "methods": [
+ {
+ "name": "",
+ "parameterTypes": []
+ },
+ {
+ "name": "",
+ "parameterTypes": [
+ "int",
+ "byte[]",
+ "int",
+ "float[]",
+ "int"
+ ]
+ }
+ ]
+ },
+ {
+ "name": "java.awt.geom.Path2D",
+ "fields": [
+ {
+ "name": "numTypes"
+ },
+ {
+ "name": "pointTypes"
+ },
+ {
+ "name": "windingRule"
+ }
+ ]
+ },
+ {
+ "name": "java.awt.geom.Path2D$Float",
+ "fields": [
+ {
+ "name": "floatCoords"
+ }
+ ]
+ },
+ {
+ "name": "java.awt.geom.Point2D$Float",
+ "fields": [
+ {
+ "name": "x"
+ },
+ {
+ "name": "y"
+ }
+ ],
+ "methods": [
+ {
+ "name": "",
+ "parameterTypes": [
+ "float",
+ "float"
+ ]
+ }
+ ]
+ },
+ {
+ "name": "java.awt.geom.Rectangle2D$Float",
+ "fields": [
+ {
+ "name": "height"
+ },
+ {
+ "name": "width"
+ },
+ {
+ "name": "x"
+ },
+ {
+ "name": "y"
+ }
+ ],
+ "methods": [
+ {
+ "name": "",
+ "parameterTypes": []
+ },
+ {
+ "name": "",
+ "parameterTypes": [
+ "float",
+ "float",
+ "float",
+ "float"
+ ]
+ }
+ ]
+ },
+ {
+ "name": "java.awt.image.BufferedImage",
+ "fields": [
+ {
+ "name": "colorModel"
+ },
+ {
+ "name": "imageType"
+ },
+ {
+ "name": "raster"
+ }
+ ],
+ "methods": [
+ {
+ "name": "getRGB",
+ "parameterTypes": [
+ "int",
+ "int",
+ "int",
+ "int",
+ "int[]",
+ "int",
+ "int"
+ ]
+ },
+ {
+ "name": "setRGB",
+ "parameterTypes": [
+ "int",
+ "int",
+ "int",
+ "int",
+ "int[]",
+ "int",
+ "int"
+ ]
+ }
+ ]
+ },
+ {
+ "name": "java.awt.image.ColorModel",
+ "fields": [
+ {
+ "name": "colorSpace"
+ },
+ {
+ "name": "colorSpaceType"
+ },
+ {
+ "name": "isAlphaPremultiplied"
+ },
+ {
+ "name": "is_sRGB"
+ },
+ {
+ "name": "nBits"
+ },
+ {
+ "name": "numComponents"
+ },
+ {
+ "name": "pData"
+ },
+ {
+ "name": "supportsAlpha"
+ },
+ {
+ "name": "transparency"
+ }
+ ],
+ "methods": [
+ {
+ "name": "getRGBdefault",
+ "parameterTypes": []
+ }
+ ]
+ },
+ {
+ "name": "java.awt.image.DirectColorModel",
+ "methods": [
+ {
+ "name": "",
+ "parameterTypes": [
+ "int",
+ "int",
+ "int",
+ "int"
+ ]
+ }
+ ]
+ },
+ {
+ "name": "java.awt.image.IndexColorModel",
+ "fields": [
+ {
+ "name": "allgrayopaque"
+ },
+ {
+ "name": "colorData"
+ },
+ {
+ "name": "lookupcache"
+ },
+ {
+ "name": "map_size"
+ },
+ {
+ "name": "rgb"
+ },
+ {
+ "name": "transparent_index"
+ }
+ ]
+ },
+ {
+ "name": "java.awt.image.Raster",
+ "fields": [
+ {
+ "name": "dataBuffer"
+ },
+ {
+ "name": "height"
+ },
+ {
+ "name": "minX"
+ },
+ {
+ "name": "minY"
+ },
+ {
+ "name": "numBands"
+ },
+ {
+ "name": "numDataElements"
+ },
+ {
+ "name": "sampleModel"
+ },
+ {
+ "name": "sampleModelTranslateX"
+ },
+ {
+ "name": "sampleModelTranslateY"
+ },
+ {
+ "name": "width"
+ }
+ ]
+ },
+ {
+ "name": "java.awt.image.SampleModel",
+ "fields": [
+ {
+ "name": "height"
+ },
+ {
+ "name": "width"
+ }
+ ],
+ "methods": [
+ {
+ "name": "getPixels",
+ "parameterTypes": [
+ "int",
+ "int",
+ "int",
+ "int",
+ "int[]",
+ "java.awt.image.DataBuffer"
+ ]
+ },
+ {
+ "name": "setPixels",
+ "parameterTypes": [
+ "int",
+ "int",
+ "int",
+ "int",
+ "int[]",
+ "java.awt.image.DataBuffer"
+ ]
+ }
+ ]
+ },
+ {
+ "name": "java.awt.image.SinglePixelPackedSampleModel",
+ "fields": [
+ {
+ "name": "bitMasks"
+ },
+ {
+ "name": "bitOffsets"
+ },
+ {
+ "name": "bitSizes"
+ },
+ {
+ "name": "maxBitSize"
+ }
+ ]
+ },
+ {
+ "name": "java.lang.Boolean",
+ "methods": [
+ {
+ "name": "getBoolean",
+ "parameterTypes": [
+ "java.lang.String"
+ ]
+ }
+ ]
+ },
+ {
+ "name": "java.lang.Enum",
+ "methods": [
+ {
+ "name": "name",
+ "parameterTypes": []
+ }
+ ]
+ },
+ {
+ "name": "java.lang.Thread",
+ "methods": [
+ {
+ "name": "currentThread",
+ "parameterTypes": []
+ }
+ ]
+ },
+ {
+ "name": "java.util.Locale",
+ "methods": [
+ {
+ "name": "forLanguageTag",
+ "parameterTypes": [
+ "java.lang.String"
+ ]
+ }
+ ]
+ },
+ {
+ "name": "sun.awt.AWTAutoShutdown",
+ "methods": [
+ {
+ "name": "notifyToolkitThreadBusy",
+ "parameterTypes": []
+ },
+ {
+ "name": "notifyToolkitThreadFree",
+ "parameterTypes": []
+ }
+ ]
+ },
+ {
+ "name": "sun.awt.EmbeddedFrame"
+ },
+ {
+ "name": "sun.awt.ExtendedKeyCodes",
+ "methods": [
+ {
+ "name": "getExtendedKeyCodeForChar",
+ "parameterTypes": [
+ "int"
+ ]
+ }
+ ]
+ },
+ {
+ "name": "sun.awt.FontDescriptor",
+ "fields": [
+ {
+ "name": "nativeName"
+ },
+ {
+ "name": "useUnicode"
+ }
+ ]
+ },
+ {
+ "name": "sun.awt.LightweightFrame"
+ },
+ {
+ "name": "sun.awt.PlatformFont",
+ "fields": [
+ {
+ "name": "componentFonts"
+ },
+ {
+ "name": "fontConfig"
+ }
+ ],
+ "methods": [
+ {
+ "name": "makeConvertedMultiFontString",
+ "parameterTypes": [
+ "java.lang.String"
+ ]
+ }
+ ]
+ },
+ {
+ "name": "sun.awt.SunHints",
+ "fields": [
+ {
+ "name": "INTVAL_STROKE_PURE"
+ }
+ ]
+ },
+ {
+ "name": "sun.awt.SunToolkit",
+ "methods": [
+ {
+ "name": "isTouchKeyboardAutoShowEnabled",
+ "parameterTypes": []
+ }
+ ]
+ },
+ {
+ "name": "sun.awt.TimedWindowEvent",
+ "methods": [
+ {
+ "name": "",
+ "parameterTypes": [
+ "java.awt.Window",
+ "int",
+ "java.awt.Window",
+ "int",
+ "int",
+ "long"
+ ]
+ }
+ ]
+ },
+ {
+ "name": "sun.awt.Win32GraphicsConfig",
+ "fields": [
+ {
+ "name": "visual"
+ }
+ ]
+ },
+ {
+ "name": "sun.awt.Win32GraphicsDevice",
+ "fields": [
+ {
+ "name": "dynamicColorModel"
+ }
+ ]
+ },
+ {
+ "name": "sun.awt.Win32GraphicsEnvironment",
+ "methods": [
+ {
+ "name": "dwmCompositionChanged",
+ "parameterTypes": [
+ "boolean"
+ ]
+ }
+ ]
+ },
+ {
+ "name": "sun.awt.im.InputMethodWindow"
+ },
+ {
+ "name": "sun.awt.image.BufImgSurfaceData$ICMColorData",
+ "fields": [
+ {
+ "name": "pData"
+ }
+ ],
+ "methods": [
+ {
+ "name": "",
+ "parameterTypes": [
+ "long"
+ ]
+ }
+ ]
+ },
+ {
+ "name": "sun.awt.image.ByteComponentRaster",
+ "fields": [
+ {
+ "name": "data"
+ },
+ {
+ "name": "dataOffsets"
+ },
+ {
+ "name": "pixelStride"
+ },
+ {
+ "name": "scanlineStride"
+ },
+ {
+ "name": "type"
+ }
+ ]
+ },
+ {
+ "name": "sun.awt.image.GifImageDecoder",
+ "fields": [
+ {
+ "name": "outCode"
+ },
+ {
+ "name": "prefix"
+ },
+ {
+ "name": "suffix"
+ }
+ ],
+ "methods": [
+ {
+ "name": "readBytes",
+ "parameterTypes": [
+ "byte[]",
+ "int",
+ "int"
+ ]
+ },
+ {
+ "name": "sendPixels",
+ "parameterTypes": [
+ "int",
+ "int",
+ "int",
+ "int",
+ "byte[]",
+ "java.awt.image.ColorModel"
+ ]
+ }
+ ]
+ },
+ {
+ "name": "sun.awt.image.ImageRepresentation",
+ "fields": [
+ {
+ "name": "numSrcLUT"
+ },
+ {
+ "name": "srcLUTtransIndex"
+ }
+ ]
+ },
+ {
+ "name": "sun.awt.image.IntegerComponentRaster",
+ "fields": [
+ {
+ "name": "data"
+ },
+ {
+ "name": "dataOffsets"
+ },
+ {
+ "name": "pixelStride"
+ },
+ {
+ "name": "scanlineStride"
+ },
+ {
+ "name": "type"
+ }
+ ]
+ },
+ {
+ "name": "sun.awt.image.SunVolatileImage",
+ "fields": [
+ {
+ "name": "volSurfaceManager"
+ }
+ ]
+ },
+ {
+ "name": "sun.awt.image.VolatileSurfaceManager",
+ "fields": [
+ {
+ "name": "sdCurrent"
+ }
+ ]
+ },
+ {
+ "name": "sun.awt.shell.ShellFolderColumnInfo",
+ "methods": [
+ {
+ "name": "",
+ "parameterTypes": [
+ "java.lang.String",
+ "int",
+ "int",
+ "boolean"
+ ]
+ }
+ ]
+ },
+ {
+ "name": "sun.awt.shell.Win32ShellFolder2",
+ "fields": [
+ {
+ "name": "FDATE"
+ },
+ {
+ "name": "FNAME"
+ },
+ {
+ "name": "FSIZE"
+ },
+ {
+ "name": "FTYPE"
+ },
+ {
+ "name": "displayName"
+ },
+ {
+ "name": "folderType"
+ },
+ {
+ "name": "pIShellIcon"
+ }
+ ],
+ "methods": [
+ {
+ "name": "setIShellFolder",
+ "parameterTypes": [
+ "long"
+ ]
+ },
+ {
+ "name": "setRelativePIDL",
+ "parameterTypes": [
+ "long"
+ ]
+ }
+ ]
+ },
+ {
+ "name": "sun.awt.windows.WClipboard",
+ "methods": [
+ {
+ "name": "lostSelectionOwnershipImpl",
+ "parameterTypes": []
+ }
+ ]
+ },
+ {
+ "name": "sun.awt.windows.WComponentPeer",
+ "fields": [
+ {
+ "name": "hwnd"
+ },
+ {
+ "name": "winGraphicsConfig"
+ }
+ ],
+ "methods": [
+ {
+ "name": "disposeLater",
+ "parameterTypes": []
+ },
+ {
+ "name": "handleExpose",
+ "parameterTypes": [
+ "int",
+ "int",
+ "int",
+ "int"
+ ]
+ },
+ {
+ "name": "postEvent",
+ "parameterTypes": [
+ "java.awt.AWTEvent"
+ ]
+ },
+ {
+ "name": "replaceSurfaceData",
+ "parameterTypes": []
+ },
+ {
+ "name": "replaceSurfaceDataLater",
+ "parameterTypes": []
+ }
+ ]
+ },
+ {
+ "name": "sun.awt.windows.WDefaultFontCharset",
+ "fields": [
+ {
+ "name": "fontName"
+ }
+ ]
+ },
+ {
+ "name": "sun.awt.windows.WDesktopPeer",
+ "methods": [
+ {
+ "name": "systemSleepCallback",
+ "parameterTypes": [
+ "boolean"
+ ]
+ },
+ {
+ "name": "userSessionCallback",
+ "parameterTypes": [
+ "boolean",
+ "java.awt.desktop.UserSessionEvent$Reason"
+ ]
+ }
+ ]
+ },
+ {
+ "name": "sun.awt.windows.WDesktopProperties",
+ "fields": [
+ {
+ "name": "pData"
+ }
+ ],
+ "methods": [
+ {
+ "name": "setBooleanProperty",
+ "parameterTypes": [
+ "java.lang.String",
+ "boolean"
+ ]
+ },
+ {
+ "name": "setColorProperty",
+ "parameterTypes": [
+ "java.lang.String",
+ "int",
+ "int",
+ "int"
+ ]
+ },
+ {
+ "name": "setFontProperty",
+ "parameterTypes": [
+ "java.lang.String",
+ "java.lang.String",
+ "int",
+ "int"
+ ]
+ },
+ {
+ "name": "setIntegerProperty",
+ "parameterTypes": [
+ "java.lang.String",
+ "int"
+ ]
+ },
+ {
+ "name": "setSoundProperty",
+ "parameterTypes": [
+ "java.lang.String",
+ "java.lang.String"
+ ]
+ },
+ {
+ "name": "setStringProperty",
+ "parameterTypes": [
+ "java.lang.String",
+ "java.lang.String"
+ ]
+ }
+ ]
+ },
+ {
+ "name": "sun.awt.windows.WDialogPeer"
+ },
+ {
+ "name": "sun.awt.windows.WFontPeer",
+ "fields": [
+ {
+ "name": "textComponentFontName"
+ }
+ ]
+ },
+ {
+ "name": "sun.awt.windows.WFramePeer",
+ "methods": [
+ {
+ "name": "getExtendedState",
+ "parameterTypes": []
+ }
+ ]
+ },
+ {
+ "name": "sun.awt.windows.WGlobalCursorManager",
+ "methods": [
+ {
+ "name": "nativeUpdateCursor",
+ "parameterTypes": [
+ "java.awt.Component"
+ ]
+ }
+ ]
+ },
+ {
+ "name": "sun.awt.windows.WInputMethod",
+ "methods": [
+ {
+ "name": "inquireCandidatePosition",
+ "parameterTypes": []
+ }
+ ]
+ },
+ {
+ "name": "sun.awt.windows.WObjectPeer",
+ "fields": [
+ {
+ "name": "createError"
+ },
+ {
+ "name": "destroyed"
+ },
+ {
+ "name": "pData"
+ },
+ {
+ "name": "target"
+ }
+ ],
+ "methods": [
+ {
+ "name": "getPeerForTarget",
+ "parameterTypes": [
+ "java.lang.Object"
+ ]
+ }
+ ]
+ },
+ {
+ "name": "sun.awt.windows.WPanelPeer",
+ "fields": [
+ {
+ "name": "insets_"
+ }
+ ]
+ },
+ {
+ "name": "sun.awt.windows.WToolkit",
+ "methods": [
+ {
+ "name": "displayChanged",
+ "parameterTypes": []
+ },
+ {
+ "name": "paletteChanged",
+ "parameterTypes": []
+ },
+ {
+ "name": "windowsSettingChange",
+ "parameterTypes": []
+ }
+ ]
+ },
+ {
+ "name": "sun.awt.windows.WWindowPeer",
+ "fields": [
+ {
+ "name": "windowType"
+ }
+ ],
+ "methods": [
+ {
+ "name": "draggedToNewScreen",
+ "parameterTypes": []
+ },
+ {
+ "name": "getActiveWindowHandles",
+ "parameterTypes": [
+ "java.awt.Component"
+ ]
+ },
+ {
+ "name": "notifyWindowStateChanged",
+ "parameterTypes": [
+ "int",
+ "int"
+ ]
+ },
+ {
+ "name": "setBackground",
+ "parameterTypes": [
+ "java.awt.Color"
+ ]
+ }
+ ]
+ },
+ {
+ "name": "sun.font.CharToGlyphMapper",
+ "methods": [
+ {
+ "name": "charToGlyph",
+ "parameterTypes": [
+ "int"
+ ]
+ }
+ ]
+ },
+ {
+ "name": "sun.font.Font2D",
+ "methods": [
+ {
+ "name": "canDisplay",
+ "parameterTypes": [
+ "char"
+ ]
+ },
+ {
+ "name": "charToGlyph",
+ "parameterTypes": [
+ "int"
+ ]
+ },
+ {
+ "name": "charToVariationGlyph",
+ "parameterTypes": [
+ "int",
+ "int"
+ ]
+ },
+ {
+ "name": "getMapper",
+ "parameterTypes": []
+ },
+ {
+ "name": "getTableBytes",
+ "parameterTypes": [
+ "int"
+ ]
+ }
+ ]
+ },
+ {
+ "name": "sun.font.FontStrike",
+ "methods": [
+ {
+ "name": "getGlyphMetrics",
+ "parameterTypes": [
+ "int"
+ ]
+ }
+ ]
+ },
+ {
+ "name": "sun.font.FreetypeFontScaler",
+ "methods": [
+ {
+ "name": "invalidateScaler",
+ "parameterTypes": []
+ }
+ ]
+ },
+ {
+ "name": "sun.font.GlyphList",
+ "fields": [
+ {
+ "name": "gposx"
+ },
+ {
+ "name": "gposy"
+ },
+ {
+ "name": "images"
+ },
+ {
+ "name": "lcdRGBOrder"
+ },
+ {
+ "name": "lcdSubPixPos"
+ },
+ {
+ "name": "len"
+ },
+ {
+ "name": "positions"
+ },
+ {
+ "name": "usePositions"
+ }
+ ]
+ },
+ {
+ "name": "sun.font.PhysicalStrike",
+ "fields": [
+ {
+ "name": "pScalerContext"
+ }
+ ],
+ "methods": [
+ {
+ "name": "adjustPoint",
+ "parameterTypes": [
+ "java.awt.geom.Point2D$Float"
+ ]
+ },
+ {
+ "name": "getGlyphPoint",
+ "parameterTypes": [
+ "int",
+ "int"
+ ]
+ }
+ ]
+ },
+ {
+ "name": "sun.font.StrikeMetrics",
+ "methods": [
+ {
+ "name": "",
+ "parameterTypes": [
+ "float",
+ "float",
+ "float",
+ "float",
+ "float",
+ "float",
+ "float",
+ "float",
+ "float",
+ "float"
+ ]
+ }
+ ]
+ },
+ {
+ "name": "sun.font.TrueTypeFont",
+ "methods": [
+ {
+ "name": "readBlock",
+ "parameterTypes": [
+ "java.nio.ByteBuffer",
+ "int",
+ "int"
+ ]
+ },
+ {
+ "name": "readBytes",
+ "parameterTypes": [
+ "int",
+ "int"
+ ]
+ }
+ ]
+ },
+ {
+ "name": "sun.font.Type1Font",
+ "methods": [
+ {
+ "name": "readFile",
+ "parameterTypes": [
+ "java.nio.ByteBuffer"
+ ]
+ }
+ ]
+ },
+ {
+ "name": "sun.java2d.Disposer",
+ "methods": [
+ {
+ "name": "addRecord",
+ "parameterTypes": [
+ "java.lang.Object",
+ "long",
+ "long"
+ ]
+ }
+ ]
+ },
+ {
+ "name": "sun.java2d.InvalidPipeException"
+ },
+ {
+ "name": "sun.java2d.NullSurfaceData"
+ },
+ {
+ "name": "sun.java2d.SunGraphics2D",
+ "fields": [
+ {
+ "name": "clipRegion"
+ },
+ {
+ "name": "composite"
+ },
+ {
+ "name": "eargb"
+ },
+ {
+ "name": "lcdTextContrast"
+ },
+ {
+ "name": "pixel"
+ },
+ {
+ "name": "strokeHint"
+ }
+ ]
+ },
+ {
+ "name": "sun.java2d.SurfaceData",
+ "fields": [
+ {
+ "name": "pData"
+ },
+ {
+ "name": "valid"
+ }
+ ]
+ },
+ {
+ "name": "sun.java2d.d3d.D3DGraphicsDevice$1",
+ "methods": [
+ {
+ "name": "run",
+ "parameterTypes": []
+ }
+ ]
+ },
+ {
+ "name": "sun.java2d.d3d.D3DRenderQueue$1",
+ "methods": [
+ {
+ "name": "run",
+ "parameterTypes": []
+ }
+ ]
+ },
+ {
+ "name": "sun.java2d.d3d.D3DSurfaceData",
+ "fields": [
+ {
+ "name": "nativeHeight"
+ },
+ {
+ "name": "nativeWidth"
+ }
+ ],
+ "methods": [
+ {
+ "name": "dispose",
+ "parameterTypes": [
+ "long"
+ ]
+ },
+ {
+ "name": "setSurfaceLost",
+ "parameterTypes": [
+ "boolean"
+ ]
+ }
+ ]
+ },
+ {
+ "name": "sun.java2d.d3d.D3DSurfaceData$1",
+ "methods": [
+ {
+ "name": "run",
+ "parameterTypes": []
+ }
+ ]
+ },
+ {
+ "name": "sun.java2d.d3d.D3DSurfaceData$D3DWindowSurfaceData"
+ },
+ {
+ "name": "sun.java2d.loops.Blit",
+ "methods": [
+ {
+ "name": "",
+ "parameterTypes": [
+ "long",
+ "sun.java2d.loops.SurfaceType",
+ "sun.java2d.loops.CompositeType",
+ "sun.java2d.loops.SurfaceType"
+ ]
+ }
+ ]
+ },
+ {
+ "name": "sun.java2d.loops.BlitBg",
+ "methods": [
+ {
+ "name": "",
+ "parameterTypes": [
+ "long",
+ "sun.java2d.loops.SurfaceType",
+ "sun.java2d.loops.CompositeType",
+ "sun.java2d.loops.SurfaceType"
+ ]
+ }
+ ]
+ },
+ {
+ "name": "sun.java2d.loops.CompositeType",
+ "fields": [
+ {
+ "name": "AnyAlpha"
+ },
+ {
+ "name": "Src"
+ },
+ {
+ "name": "SrcNoEa"
+ },
+ {
+ "name": "SrcOver"
+ },
+ {
+ "name": "SrcOverNoEa"
+ },
+ {
+ "name": "Xor"
+ }
+ ]
+ },
+ {
+ "name": "sun.java2d.loops.DrawGlyphList",
+ "methods": [
+ {
+ "name": "",
+ "parameterTypes": [
+ "long",
+ "sun.java2d.loops.SurfaceType",
+ "sun.java2d.loops.CompositeType",
+ "sun.java2d.loops.SurfaceType"
+ ]
+ }
+ ]
+ },
+ {
+ "name": "sun.java2d.loops.DrawGlyphListAA",
+ "methods": [
+ {
+ "name": "",
+ "parameterTypes": [
+ "long",
+ "sun.java2d.loops.SurfaceType",
+ "sun.java2d.loops.CompositeType",
+ "sun.java2d.loops.SurfaceType"
+ ]
+ }
+ ]
+ },
+ {
+ "name": "sun.java2d.loops.DrawGlyphListLCD",
+ "methods": [
+ {
+ "name": "",
+ "parameterTypes": [
+ "long",
+ "sun.java2d.loops.SurfaceType",
+ "sun.java2d.loops.CompositeType",
+ "sun.java2d.loops.SurfaceType"
+ ]
+ }
+ ]
+ },
+ {
+ "name": "sun.java2d.loops.DrawLine",
+ "methods": [
+ {
+ "name": "",
+ "parameterTypes": [
+ "long",
+ "sun.java2d.loops.SurfaceType",
+ "sun.java2d.loops.CompositeType",
+ "sun.java2d.loops.SurfaceType"
+ ]
+ }
+ ]
+ },
+ {
+ "name": "sun.java2d.loops.DrawParallelogram",
+ "methods": [
+ {
+ "name": "",
+ "parameterTypes": [
+ "long",
+ "sun.java2d.loops.SurfaceType",
+ "sun.java2d.loops.CompositeType",
+ "sun.java2d.loops.SurfaceType"
+ ]
+ }
+ ]
+ },
+ {
+ "name": "sun.java2d.loops.DrawPath",
+ "methods": [
+ {
+ "name": "",
+ "parameterTypes": [
+ "long",
+ "sun.java2d.loops.SurfaceType",
+ "sun.java2d.loops.CompositeType",
+ "sun.java2d.loops.SurfaceType"
+ ]
+ }
+ ]
+ },
+ {
+ "name": "sun.java2d.loops.DrawPolygons",
+ "methods": [
+ {
+ "name": "",
+ "parameterTypes": [
+ "long",
+ "sun.java2d.loops.SurfaceType",
+ "sun.java2d.loops.CompositeType",
+ "sun.java2d.loops.SurfaceType"
+ ]
+ }
+ ]
+ },
+ {
+ "name": "sun.java2d.loops.DrawRect",
+ "methods": [
+ {
+ "name": "",
+ "parameterTypes": [
+ "long",
+ "sun.java2d.loops.SurfaceType",
+ "sun.java2d.loops.CompositeType",
+ "sun.java2d.loops.SurfaceType"
+ ]
+ }
+ ]
+ },
+ {
+ "name": "sun.java2d.loops.FillParallelogram",
+ "methods": [
+ {
+ "name": "",
+ "parameterTypes": [
+ "long",
+ "sun.java2d.loops.SurfaceType",
+ "sun.java2d.loops.CompositeType",
+ "sun.java2d.loops.SurfaceType"
+ ]
+ }
+ ]
+ },
+ {
+ "name": "sun.java2d.loops.FillPath",
+ "methods": [
+ {
+ "name": "",
+ "parameterTypes": [
+ "long",
+ "sun.java2d.loops.SurfaceType",
+ "sun.java2d.loops.CompositeType",
+ "sun.java2d.loops.SurfaceType"
+ ]
+ }
+ ]
+ },
+ {
+ "name": "sun.java2d.loops.FillRect",
+ "methods": [
+ {
+ "name": "",
+ "parameterTypes": [
+ "long",
+ "sun.java2d.loops.SurfaceType",
+ "sun.java2d.loops.CompositeType",
+ "sun.java2d.loops.SurfaceType"
+ ]
+ }
+ ]
+ },
+ {
+ "name": "sun.java2d.loops.FillSpans",
+ "methods": [
+ {
+ "name": "",
+ "parameterTypes": [
+ "long",
+ "sun.java2d.loops.SurfaceType",
+ "sun.java2d.loops.CompositeType",
+ "sun.java2d.loops.SurfaceType"
+ ]
+ }
+ ]
+ },
+ {
+ "name": "sun.java2d.loops.GraphicsPrimitive",
+ "fields": [
+ {
+ "name": "pNativePrim"
+ }
+ ]
+ },
+ {
+ "name": "sun.java2d.loops.GraphicsPrimitiveMgr",
+ "methods": [
+ {
+ "name": "register",
+ "parameterTypes": [
+ "sun.java2d.loops.GraphicsPrimitive[]"
+ ]
+ }
+ ]
+ },
+ {
+ "name": "sun.java2d.loops.MaskBlit",
+ "methods": [
+ {
+ "name": "",
+ "parameterTypes": [
+ "long",
+ "sun.java2d.loops.SurfaceType",
+ "sun.java2d.loops.CompositeType",
+ "sun.java2d.loops.SurfaceType"
+ ]
+ }
+ ]
+ },
+ {
+ "name": "sun.java2d.loops.MaskFill",
+ "methods": [
+ {
+ "name": "",
+ "parameterTypes": [
+ "long",
+ "sun.java2d.loops.SurfaceType",
+ "sun.java2d.loops.CompositeType",
+ "sun.java2d.loops.SurfaceType"
+ ]
+ }
+ ]
+ },
+ {
+ "name": "sun.java2d.loops.ScaledBlit",
+ "methods": [
+ {
+ "name": "",
+ "parameterTypes": [
+ "long",
+ "sun.java2d.loops.SurfaceType",
+ "sun.java2d.loops.CompositeType",
+ "sun.java2d.loops.SurfaceType"
+ ]
+ }
+ ]
+ },
+ {
+ "name": "sun.java2d.loops.SurfaceType",
+ "fields": [
+ {
+ "name": "Any3Byte"
+ },
+ {
+ "name": "Any4Byte"
+ },
+ {
+ "name": "AnyByte"
+ },
+ {
+ "name": "AnyColor"
+ },
+ {
+ "name": "AnyInt"
+ },
+ {
+ "name": "AnyShort"
+ },
+ {
+ "name": "ByteBinary1Bit"
+ },
+ {
+ "name": "ByteBinary2Bit"
+ },
+ {
+ "name": "ByteBinary4Bit"
+ },
+ {
+ "name": "ByteGray"
+ },
+ {
+ "name": "ByteIndexed"
+ },
+ {
+ "name": "ByteIndexedBm"
+ },
+ {
+ "name": "FourByteAbgr"
+ },
+ {
+ "name": "FourByteAbgrPre"
+ },
+ {
+ "name": "Index12Gray"
+ },
+ {
+ "name": "Index8Gray"
+ },
+ {
+ "name": "IntArgb"
+ },
+ {
+ "name": "IntArgbBm"
+ },
+ {
+ "name": "IntArgbPre"
+ },
+ {
+ "name": "IntBgr"
+ },
+ {
+ "name": "IntRgb"
+ },
+ {
+ "name": "IntRgbx"
+ },
+ {
+ "name": "OpaqueColor"
+ },
+ {
+ "name": "ThreeByteBgr"
+ },
+ {
+ "name": "Ushort4444Argb"
+ },
+ {
+ "name": "Ushort555Rgb"
+ },
+ {
+ "name": "Ushort555Rgbx"
+ },
+ {
+ "name": "Ushort565Rgb"
+ },
+ {
+ "name": "UshortGray"
+ },
+ {
+ "name": "UshortIndexed"
+ }
+ ]
+ },
+ {
+ "name": "sun.java2d.loops.TransformHelper",
+ "methods": [
+ {
+ "name": "",
+ "parameterTypes": [
+ "long",
+ "sun.java2d.loops.SurfaceType",
+ "sun.java2d.loops.CompositeType",
+ "sun.java2d.loops.SurfaceType"
+ ]
+ }
+ ]
+ },
+ {
+ "name": "sun.java2d.loops.XORComposite",
+ "fields": [
+ {
+ "name": "alphaMask"
+ },
+ {
+ "name": "xorColor"
+ },
+ {
+ "name": "xorPixel"
+ }
+ ]
+ },
+ {
+ "name": "sun.java2d.pipe.Region",
+ "fields": [
+ {
+ "name": "bands"
+ },
+ {
+ "name": "endIndex"
+ },
+ {
+ "name": "hix"
+ },
+ {
+ "name": "hiy"
+ },
+ {
+ "name": "lox"
+ },
+ {
+ "name": "loy"
+ }
+ ]
+ },
+ {
+ "name": "sun.java2d.pipe.RegionIterator",
+ "fields": [
+ {
+ "name": "curIndex"
+ },
+ {
+ "name": "numXbands"
+ },
+ {
+ "name": "region"
+ }
+ ]
+ },
+ {
+ "name": "sun.java2d.windows.WindowsFlags",
+ "fields": [
+ {
+ "name": "d3dEnabled"
+ },
+ {
+ "name": "d3dSet"
+ },
+ {
+ "name": "offscreenSharingEnabled"
+ },
+ {
+ "name": "setHighDPIAware"
+ }
+ ]
+ }
+]
diff --git a/ui/video-encryptor/src/main/resources/META-INF/native-image/predefined-classes-config.json b/ui/video-encryptor/src/main/resources/META-INF/native-image/predefined-classes-config.json
new file mode 100644
index 0000000..86de6bb
--- /dev/null
+++ b/ui/video-encryptor/src/main/resources/META-INF/native-image/predefined-classes-config.json
@@ -0,0 +1,8 @@
+[
+ {
+ "type": "agent-extracted",
+ "classes": [
+ ]
+ }
+]
+
diff --git a/ui/video-encryptor/src/main/resources/META-INF/native-image/proxy-config.json b/ui/video-encryptor/src/main/resources/META-INF/native-image/proxy-config.json
new file mode 100644
index 0000000..0d4f101
--- /dev/null
+++ b/ui/video-encryptor/src/main/resources/META-INF/native-image/proxy-config.json
@@ -0,0 +1,2 @@
+[
+]
diff --git a/ui/video-encryptor/src/main/resources/META-INF/native-image/reflect-config.json b/ui/video-encryptor/src/main/resources/META-INF/native-image/reflect-config.json
new file mode 100644
index 0000000..5ca2816
--- /dev/null
+++ b/ui/video-encryptor/src/main/resources/META-INF/native-image/reflect-config.json
@@ -0,0 +1,411 @@
+[
+ {
+ "name": "[B"
+ },
+ {
+ "name": "[C"
+ },
+ {
+ "name": "[Ljava.awt.event.MouseMotionListener;"
+ },
+ {
+ "name": "com.hnos.video.VideoEncryptorGUI",
+ "methods": [
+ {
+ "name": "coalesceEvents",
+ "parameterTypes": [
+ "java.awt.AWTEvent",
+ "java.awt.AWTEvent"
+ ]
+ }
+ ]
+ },
+ {
+ "name": "com.sun.crypto.provider.AESCipher$General",
+ "methods": [
+ {
+ "name": "",
+ "parameterTypes": []
+ }
+ ]
+ },
+ {
+ "name": "default"
+ },
+ {
+ "name": "java.awt.Image"
+ },
+ {
+ "name": "java.awt.SequencedEvent"
+ },
+ {
+ "name": "java.awt.event.KeyEvent",
+ "fields": [
+ {
+ "name": "VK_A"
+ },
+ {
+ "name": "VK_BACK_SLASH"
+ },
+ {
+ "name": "VK_BACK_SPACE"
+ },
+ {
+ "name": "VK_C"
+ },
+ {
+ "name": "VK_CONTEXT_MENU"
+ },
+ {
+ "name": "VK_COPY"
+ },
+ {
+ "name": "VK_CUT"
+ },
+ {
+ "name": "VK_DELETE"
+ },
+ {
+ "name": "VK_DOWN"
+ },
+ {
+ "name": "VK_END"
+ },
+ {
+ "name": "VK_ENTER"
+ },
+ {
+ "name": "VK_ESCAPE"
+ },
+ {
+ "name": "VK_F10"
+ },
+ {
+ "name": "VK_F2"
+ },
+ {
+ "name": "VK_F5"
+ },
+ {
+ "name": "VK_H"
+ },
+ {
+ "name": "VK_HOME"
+ },
+ {
+ "name": "VK_INSERT"
+ },
+ {
+ "name": "VK_KP_DOWN"
+ },
+ {
+ "name": "VK_KP_LEFT"
+ },
+ {
+ "name": "VK_KP_RIGHT"
+ },
+ {
+ "name": "VK_KP_UP"
+ },
+ {
+ "name": "VK_LEFT"
+ },
+ {
+ "name": "VK_O"
+ },
+ {
+ "name": "VK_PAGE_DOWN"
+ },
+ {
+ "name": "VK_PAGE_UP"
+ },
+ {
+ "name": "VK_PASTE"
+ },
+ {
+ "name": "VK_RIGHT"
+ },
+ {
+ "name": "VK_SLASH"
+ },
+ {
+ "name": "VK_SPACE"
+ },
+ {
+ "name": "VK_UP"
+ },
+ {
+ "name": "VK_V"
+ },
+ {
+ "name": "VK_X"
+ }
+ ]
+ },
+ {
+ "name": "java.io.InputStream"
+ },
+ {
+ "name": "java.io.Reader"
+ },
+ {
+ "name": "java.lang.String"
+ },
+ {
+ "name": "java.net.URL"
+ },
+ {
+ "name": "java.nio.ByteBuffer"
+ },
+ {
+ "name": "java.nio.CharBuffer"
+ },
+ {
+ "name": "java.rmi.MarshalledObject",
+ "methods": [
+ {
+ "name": "",
+ "parameterTypes": [
+ "java.lang.Object"
+ ]
+ },
+ {
+ "name": "get",
+ "parameterTypes": []
+ }
+ ]
+ },
+ {
+ "name": "java.rmi.Remote"
+ },
+ {
+ "name": "java.security.SecureRandomParameters"
+ },
+ {
+ "name": "java.util.List"
+ },
+ {
+ "name": "java.util.concurrent.atomic.AtomicBoolean",
+ "fields": [
+ {
+ "name": "value"
+ }
+ ]
+ },
+ {
+ "name": "javax.swing.plaf.basic.BasicListUI",
+ "methods": [
+ {
+ "name": "createUI",
+ "parameterTypes": [
+ "javax.swing.JComponent"
+ ]
+ }
+ ]
+ },
+ {
+ "name": "javax.swing.plaf.basic.BasicOptionPaneUI",
+ "methods": [
+ {
+ "name": "createUI",
+ "parameterTypes": [
+ "javax.swing.JComponent"
+ ]
+ },
+ {
+ "name": "loadActionMap",
+ "parameterTypes": [
+ "javax.swing.plaf.basic.LazyActionMap"
+ ]
+ }
+ ]
+ },
+ {
+ "name": "javax.swing.plaf.basic.BasicPanelUI",
+ "methods": [
+ {
+ "name": "createUI",
+ "parameterTypes": [
+ "javax.swing.JComponent"
+ ]
+ }
+ ]
+ },
+ {
+ "name": "javax.swing.plaf.basic.BasicPopupMenuUI",
+ "methods": [
+ {
+ "name": "createUI",
+ "parameterTypes": [
+ "javax.swing.JComponent"
+ ]
+ }
+ ]
+ },
+ {
+ "name": "javax.swing.plaf.basic.BasicViewportUI",
+ "methods": [
+ {
+ "name": "createUI",
+ "parameterTypes": [
+ "javax.swing.JComponent"
+ ]
+ }
+ ]
+ },
+ {
+ "name": "javax.swing.plaf.metal.MetalButtonUI",
+ "methods": [
+ {
+ "name": "createUI",
+ "parameterTypes": [
+ "javax.swing.JComponent"
+ ]
+ }
+ ]
+ },
+ {
+ "name": "javax.swing.plaf.metal.MetalComboBoxUI",
+ "methods": [
+ {
+ "name": "createUI",
+ "parameterTypes": [
+ "javax.swing.JComponent"
+ ]
+ }
+ ]
+ },
+ {
+ "name": "javax.swing.plaf.metal.MetalFileChooserUI",
+ "methods": [
+ {
+ "name": "createUI",
+ "parameterTypes": [
+ "javax.swing.JComponent"
+ ]
+ }
+ ]
+ },
+ {
+ "name": "javax.swing.plaf.metal.MetalLabelUI",
+ "methods": [
+ {
+ "name": "createUI",
+ "parameterTypes": [
+ "javax.swing.JComponent"
+ ]
+ }
+ ]
+ },
+ {
+ "name": "javax.swing.plaf.metal.MetalRootPaneUI",
+ "methods": [
+ {
+ "name": "createUI",
+ "parameterTypes": [
+ "javax.swing.JComponent"
+ ]
+ }
+ ]
+ },
+ {
+ "name": "javax.swing.plaf.metal.MetalScrollBarUI",
+ "methods": [
+ {
+ "name": "createUI",
+ "parameterTypes": [
+ "javax.swing.JComponent"
+ ]
+ }
+ ]
+ },
+ {
+ "name": "javax.swing.plaf.metal.MetalScrollPaneUI",
+ "methods": [
+ {
+ "name": "createUI",
+ "parameterTypes": [
+ "javax.swing.JComponent"
+ ]
+ }
+ ]
+ },
+ {
+ "name": "javax.swing.plaf.metal.MetalTextFieldUI",
+ "methods": [
+ {
+ "name": "createUI",
+ "parameterTypes": [
+ "javax.swing.JComponent"
+ ]
+ }
+ ]
+ },
+ {
+ "name": "javax.swing.plaf.metal.MetalToggleButtonUI",
+ "methods": [
+ {
+ "name": "createUI",
+ "parameterTypes": [
+ "javax.swing.JComponent"
+ ]
+ }
+ ]
+ },
+ {
+ "name": "sun.awt.Symbol",
+ "methods": [
+ {
+ "name": "",
+ "parameterTypes": []
+ }
+ ]
+ },
+ {
+ "name": "sun.awt.Win32FontManager",
+ "methods": [
+ {
+ "name": "",
+ "parameterTypes": []
+ }
+ ]
+ },
+ {
+ "name": "sun.awt.shell.Win32ShellFolderManager2",
+ "methods": [
+ {
+ "name": "",
+ "parameterTypes": []
+ }
+ ]
+ },
+ {
+ "name": "sun.awt.windows.WingDings",
+ "methods": [
+ {
+ "name": "",
+ "parameterTypes": []
+ }
+ ]
+ },
+ {
+ "name": "sun.java2d.marlin.DMarlinRenderingEngine",
+ "methods": [
+ {
+ "name": "",
+ "parameterTypes": []
+ }
+ ]
+ },
+ {
+ "name": "sun.security.provider.DRBG",
+ "methods": [
+ {
+ "name": "",
+ "parameterTypes": [
+ "java.security.SecureRandomParameters"
+ ]
+ }
+ ]
+ }
+]
diff --git a/ui/video-encryptor/src/main/resources/META-INF/native-image/resource-config.json b/ui/video-encryptor/src/main/resources/META-INF/native-image/resource-config.json
new file mode 100644
index 0000000..0c6e375
--- /dev/null
+++ b/ui/video-encryptor/src/main/resources/META-INF/native-image/resource-config.json
@@ -0,0 +1,59 @@
+{
+ "resources": {
+ "includes": [
+ {
+ "pattern": "java.datatransfer:\\Qsun/datatransfer/resources/flavormap.properties\\E"
+ },
+ {
+ "pattern": "java.desktop:\\Qjavax/swing/plaf/metal/icons/ocean/computer.gif\\E"
+ },
+ {
+ "pattern": "java.desktop:\\Qjavax/swing/plaf/metal/icons/ocean/directory.gif\\E"
+ },
+ {
+ "pattern": "java.desktop:\\Qjavax/swing/plaf/metal/icons/ocean/file.gif\\E"
+ },
+ {
+ "pattern": "java.desktop:\\Qjavax/swing/plaf/metal/icons/ocean/floppy.gif\\E"
+ },
+ {
+ "pattern": "java.desktop:\\Qjavax/swing/plaf/metal/icons/ocean/hardDrive.gif\\E"
+ },
+ {
+ "pattern": "java.desktop:\\Qjavax/swing/plaf/metal/icons/ocean/homeFolder.gif\\E"
+ },
+ {
+ "pattern": "java.desktop:\\Qjavax/swing/plaf/metal/icons/ocean/info.png\\E"
+ },
+ {
+ "pattern": "java.desktop:\\Qjavax/swing/plaf/metal/icons/ocean/newFolder.gif\\E"
+ },
+ {
+ "pattern": "java.desktop:\\Qjavax/swing/plaf/metal/icons/ocean/upFolder.gif\\E"
+ }
+ ]
+ },
+ "bundles": [
+ {
+ "name": "com.sun.swing.internal.plaf.basic.resources.basic",
+ "classNames": [
+ "com.sun.swing.internal.plaf.basic.resources.basic",
+ "com.sun.swing.internal.plaf.basic.resources.basic_zh_CN"
+ ]
+ },
+ {
+ "name": "com.sun.swing.internal.plaf.metal.resources.metal",
+ "classNames": [
+ "com.sun.swing.internal.plaf.metal.resources.metal",
+ "com.sun.swing.internal.plaf.metal.resources.metal_zh_CN"
+ ]
+ },
+ {
+ "name": "sun.awt.resources.awt",
+ "classNames": [
+ "sun.awt.resources.awt",
+ "sun.awt.resources.awt_zh_CN"
+ ]
+ }
+ ]
+}
diff --git a/ui/video-encryptor/src/main/resources/META-INF/native-image/serialization-config.json b/ui/video-encryptor/src/main/resources/META-INF/native-image/serialization-config.json
new file mode 100644
index 0000000..681d9fd
--- /dev/null
+++ b/ui/video-encryptor/src/main/resources/META-INF/native-image/serialization-config.json
@@ -0,0 +1,8 @@
+{
+ "types": [
+ ],
+ "lambdaCapturingTypes": [
+ ],
+ "proxies": [
+ ]
+}