我正在尝试使用javassist加载一个特定的类,我在pre-main方法中执行此操作,如下所示:
public byte[] transform(ClassLoader loader, String className, Class<?> classBeingRedefined,
ProtectionDomain protectionDomain, byte[] classfileBuffer) throws IllegalClassFormatException
{
byte[] byteCode = classfileBuffer;
if(className.toLowerCase().endsWith("class1"))
{
ClassPool classPool = ClassPool.getDefault();
CtClass ctClass = classPool.get("com.class2");
}
}
Run Code Online (Sandbox Code Playgroud)
但不幸的是,我得到一个NotFoundException ....
com.class2是一个在加载class1后将由类加载器加载的类,但我发现为class1添加一个返回类型为com.class2的新方法
我尝试了stackoverflow.com内的所有解决方案,但没有任何结果.....
最后,class1和class2都在同一个包中并且在同一个JAR文件中,class1有一个类型为class2的成员,但我不知道为什么这个classpool无法加载第二个.
这里的堆栈跟踪:
Exception: javassist.NotFoundException: com.Class2
javassist.NotFoundException: com.Class2
at javassist.ClassPool.get(ClassPool.java:439)
at javassist.ClassPool.getCtClass(ClassPool.java:504)
at com.stuff.MainAppletTransformer.transform(MainAppletTransformer.java:69)
at sun.instrument.TransformerManager.transform(Unknown Source)
at sun.instrument.InstrumentationImpl.transform(Unknown Source)
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(Unknown Source)
at java.security.SecureClassLoader.defineClass(Unknown Source)
at java.net.URLClassLoader.defineClass(Unknown Source)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at …Run Code Online (Sandbox Code Playgroud) 我有一个java applet应用程序,我们的客户可以通过我们的网站访问它.由于Microsoft edge和chrome停止支持java插件,我们将applet转换为通过JNLP和Java Web Start启动,不幸的是,在两个浏览器中,JNLP已下载,客户应双击该文件以启动Java Web Start.
我们的客户对这种行为感到非常失望,我正试图找到解决这个问题的方法.
我想在运行时重命名java类中的字段.此外,任何访问该字段的方法;读取或写入; 我需要将其修改为使用新名称而不是旧名称....
所有这些都将在pre-main方法中完成......
作为Exmaple,给出以下代码:
public class Class1
{
String strCompany;
public String Test()
{
strCompany = "TestCompany";
return strCompany;
}
}
Run Code Online (Sandbox Code Playgroud)
在上面的类中,我需要将字段"strCompany"更改为"strCompany2",另外我需要使用方法Test来使用新名称而不是旧名称....
可以使用ctField类中的setName方法更改字段名称,但是如何修改方法体以使用新名称.
我想连接到Intranet服务器,我需要连接的URL是:
URLConnection conn = new URL("https://mywebsite").openConnection();
Run Code Online (Sandbox Code Playgroud)
当我通过以下方式调用connect方法时:`
conn.connect();
Run Code Online (Sandbox Code Playgroud)
我收到以下异常:
java.io.IOException: Unable to tunnel through proxy. Proxy rerurns HTTP/1.1 503 Service Unavailable"
at sun.net.www.protocol.httpHttpURLConnection.doTunneling
Run Code Online (Sandbox Code Playgroud)
我怎么能解决这个例外,我已尝试过在网上发布的许多解决方案,但没有任何运气.
我需要通过 CSS 格式化 JavaFX 中表格视图的最后一行,如果在 CSS 中不可能,那么如何在代码中做到这一点。