You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
68 lines
2.2 KiB
68 lines
2.2 KiB
package com.fr.design.startup; |
|
|
|
import com.fr.invoke.Reflect; |
|
|
|
import java.lang.reflect.InvocationHandler; |
|
import java.lang.reflect.Method; |
|
import java.lang.reflect.Proxy; |
|
|
|
/** |
|
* @author Starryi |
|
* @version 1.0 |
|
* Created by Starryi on 2022/1/11 |
|
*/ |
|
public class Install4jStartupNotificationProvider implements FineStartupNotificationProvider { |
|
|
|
private Install4jStartupNotificationProvider() { |
|
} |
|
private static final Install4jStartupNotificationProvider INSTANCE = new Install4jStartupNotificationProvider(); |
|
public static Install4jStartupNotificationProvider getInstance() { |
|
return INSTANCE; |
|
} |
|
|
|
@Override |
|
public void registerStartupListener(Listener listener) { |
|
Class<?> StartupNotificationListenerClass = null; |
|
try { |
|
StartupNotificationListenerClass = Reflect.on("com.install4j.api.launcher.StartupNotification$Listener").type(); |
|
} catch (Exception ignored) { |
|
} |
|
|
|
if (StartupNotificationListenerClass == null) { |
|
return; |
|
} |
|
|
|
ListenerHandler mHandler = new ListenerHandler(listener); |
|
Object listenerCallbackInstance = Proxy.newProxyInstance(this.getClass().getClassLoader(), new Class[] { StartupNotificationListenerClass }, mHandler); |
|
try { |
|
Reflect.on("com.install4j.api.launcher.StartupNotification").call("registerStartupListener", listenerCallbackInstance); |
|
} catch (Exception ignored) { |
|
} |
|
} |
|
|
|
private static class ListenerHandler implements InvocationHandler { |
|
private final Listener listener; |
|
|
|
public ListenerHandler(Listener listener) { |
|
this.listener = listener; |
|
} |
|
|
|
@Override |
|
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { |
|
if (args[0] instanceof String) { |
|
String parameters = (String) args[0]; |
|
listener.startupPerformed(parameters); |
|
} |
|
return null; |
|
} |
|
} |
|
|
|
public static void main(String[] args) { |
|
Install4jStartupNotificationProvider.getInstance().registerStartupListener(new Listener() { |
|
@Override |
|
public void startupPerformed(String parameters) { |
|
|
|
} |
|
}); |
|
} |
|
}
|
|
|