Closed yuxh closed 3 years ago
Could you post the class, or the bytecode for the class that doesn't get decompiled?
this is bytecode copyed from Bytecode Viewer : public final class com/co/m2m/alarmgather/CommMessageGather implements java/io/Serializable {
private static final long serialVersionUID = -5421099315944264558 (java.lang.Long);
private static final int THREADPOOL_COUNT = 30 (java.lang.Integer);
private static java.util.concurrent.ScheduledThreadPoolExecutor scheduledThreadPoolExecutor;
private transient com.co.m2m.base.jms.producor.NotifyMessageProducer sendInterCommLogProducer;
public CommMessageGather() { // <init> //()V
<localVar:index=0 , name=this , desc=Lcom/co/m2m/alarmgather/CommMessageGather;, sig=null, start=L1, end=L2>
L1 {
aload0 // reference to self
invokespecial java/lang/Object <init>(()V);
return
}
L2 {
}
}
public sendCommMessage(java.lang.String arg0, java.lang.String arg1, java.lang.String arg2) { //(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
<localVar:index=0 , name=this , desc=Lcom/co/m2m/alarmgather/CommMessageGather;, sig=null, start=L1, end=L2>
<localVar:index=1 , name=message , desc=Ljava/lang/String;, sig=null, start=L1, end=L2>
<localVar:index=2 , name=direct , desc=Ljava/lang/String;, sig=null, start=L1, end=L2>
<localVar:index=3 , name=messageType , desc=Ljava/lang/String;, sig=null, start=L1, end=L2>
L1 {
aload0 // reference to self
aload1 // reference to arg0
aload2 // reference to arg1
aload3
aconst_null
invokevirtual com/co/m2m/alarmgather/CommMessageGather sendCommMessage((Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V);
}
L3 {
return
}
L2 {
}
}
public sendCommMessage(java.lang.String arg0, java.lang.String arg1, java.lang.String arg2, java.lang.String arg3) { //(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
<localVar:index=0 , name=this , desc=Lcom/co/m2m/alarmgather/CommMessageGather;, sig=null, start=L1, end=L2>
<localVar:index=1 , name=message , desc=Ljava/lang/String;, sig=null, start=L1, end=L2>
<localVar:index=2 , name=direct , desc=Ljava/lang/String;, sig=null, start=L1, end=L2>
<localVar:index=3 , name=messageType , desc=Ljava/lang/String;, sig=null, start=L1, end=L2>
<localVar:index=4 , name=sid , desc=Ljava/lang/String;, sig=null, start=L1, end=L2>
<localVar:index=5 , name=interCommMessageBean , desc=Lcom/co/m2m/base/bean/InterCommMessageBean;, sig=null, start=L3, end=L2>
L1 {
aload0 // reference to self
aload1 // reference to arg0
aload2 // reference to arg1
aload3 // reference to arg2
aload4
invokespecial com/co/m2m/alarmgather/CommMessageGather createCommBean((Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Lcom/co/m2m/base/bean/InterCommMessageBean;);
astore5
}
L3 {
aconst_null
aload0 // reference to self
getfield com/co/m2m/alarmgather/CommMessageGather.sendInterCommLogProducer:com.co.m2m.base.jms.producor.NotifyMessageProducer
if_acmpeq L4
}
L5 {
getstatic com/co/m2m/alarmgather/CommMessageGather.scheduledThreadPoolExecutor:java.util.concurrent.ScheduledThreadPoolExecutor
new com/co/m2m/alarmgather/CommMessageGather$1
dup
aload0 // reference to self
aload5
invokespecial com/co/m2m/alarmgather/CommMessageGather$1 <init>((Lcom/co/m2m/alarmgather/CommMessageGather;Lcom/co/m2m/base/bean/InterCommMessageBean;)V);
invokevirtual java/util/concurrent/ScheduledThreadPoolExecutor execute((Ljava/lang/Runnable;)V);
}
L4 {
return
}
L2 {
}
}
private createCommBean(java.lang.String arg0, java.lang.String arg1, java.lang.String arg2, java.lang.String arg3) { //(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Lcom/co/m2m/base/bean/InterCommMessageBean;
<localVar:index=0 , name=this , desc=Lcom/co/m2m/alarmgather/CommMessageGather;, sig=null, start=L1, end=L2>
<localVar:index=1 , name=message , desc=Ljava/lang/String;, sig=null, start=L1, end=L2>
<localVar:index=2 , name=direct , desc=Ljava/lang/String;, sig=null, start=L1, end=L2>
<localVar:index=3 , name=messageType , desc=Ljava/lang/String;, sig=null, start=L1, end=L2>
<localVar:index=4 , name=sid , desc=Ljava/lang/String;, sig=null, start=L1, end=L2>
<localVar:index=5 , name=interCommMessageBean , desc=Lcom/co/m2m/base/bean/InterCommMessageBean;, sig=null, start=L3, end=L2>
L1 {
new com/co/m2m/base/bean/InterCommMessageBean
dup
invokespecial com/co/m2m/base/bean/InterCommMessageBean <init>(()V);
astore5
}
L3 {
aload4
invokestatic org/apache/commons/lang3/StringUtils isNotEmpty((Ljava/lang/CharSequence;)Z);
ifeq L4
}
L5 {
aload5
aload4
invokevirtual com/co/m2m/base/bean/InterCommMessageBean setSid((Ljava/lang/String;)V);
}
L4 {
aload5
new java/util/Date
dup
invokespecial java/util/Date <init>(()V);
invokevirtual com/co/m2m/base/bean/InterCommMessageBean setCommTime((Ljava/util/Date;)V);
}
L6 {
aload5
aload1 // reference to arg0
invokevirtual com/co/m2m/base/bean/InterCommMessageBean setMessage((Ljava/lang/String;)V);
}
L7 {
aload5
aload2 // reference to arg1
invokevirtual com/co/m2m/base/bean/InterCommMessageBean setDirection((Ljava/lang/String;)V);
}
L8 {
aload5
aload3 // reference to arg2
invokevirtual com/co/m2m/base/bean/InterCommMessageBean setMessageType((Ljava/lang/String;)V);
}
L9 {
aload5
areturn
}
L2 {
}
}
static access$000(com.co.m2m.alarmgather.CommMessageGather arg0) { //(Lcom/co/m2m/alarmgather/CommMessageGather;)Lcom/co/m2m/base/jms/producor/NotifyMessageProducer;
<localVar:index=0 , name=x0 , desc=Lcom/co/m2m/alarmgather/CommMessageGather;, sig=null, start=L1, end=L2>
L1 {
aload0
getfield com/co/m2m/alarmgather/CommMessageGather.sendInterCommLogProducer:com.co.m2m.base.jms.producor.NotifyMessageProducer
areturn
}
L2 {
}
}
static { // <clinit> //()V
L1 {
new java/util/concurrent/ScheduledThreadPoolExecutor
dup
bipush 30
invokespecial java/util/concurrent/ScheduledThreadPoolExecutor <init>((I)V);
putstatic com/co/m2m/alarmgather/CommMessageGather.scheduledThreadPoolExecutor:java.util.concurrent.ScheduledThreadPoolExecutor
return
}
}
//the following inner classes couldn't be decompiled: com/co/m2m/alarmgather/CommMessageGather$1 }
actuallly,I have another class named CommMessageGather$1.class in the samei directory.
Can you put CommMessageGather$1
here as well?
CommMessageGather$1 's bytecode: class com/co/m2m/alarmgather/CommMessageGather$1 implements java/lang/Runnable {
synthetic final com.co.m2m.base.bean.InterCommMessageBean val$interCommMessageBean;
synthetic final com.co.m2m.alarmgather.CommMessageGather this$0;
CommMessageGather$1(com.co.m2m.alarmgather.CommMessageGather arg0, com.co.m2m.base.bean.InterCommMessageBean arg1) { //(Lcom/co/m2m/alarmgather/CommMessageGather;Lcom/co/m2m/base/bean/InterCommMessageBean;)V
<localVar:index=0 , name=this , desc=Lcom/co/m2m/alarmgather/CommMessageGather$1;, sig=null, start=L1, end=L2>
L1 {
aload0
aload1
putfield com/co/m2m/alarmgather/CommMessageGather$1.this$0:com.co.m2m.alarmgather.CommMessageGather
aload0
aload2
putfield com/co/m2m/alarmgather/CommMessageGather$1.val$interCommMessageBean:com.co.m2m.base.bean.InterCommMessageBean
aload0
invokespecial java/lang/Object <init>(()V);
return
}
L2 {
}
}
public run() { //()V
<localVar:index=0 , name=this , desc=Lcom/co/m2m/alarmgather/CommMessageGather$1;, sig=null, start=L1, end=L2>
L1 {
aload0
getfield com/co/m2m/alarmgather/CommMessageGather$1.this$0:com.co.m2m.alarmgather.CommMessageGather
invokestatic com/co/m2m/alarmgather/CommMessageGather access$000((Lcom/co/m2m/alarmgather/CommMessageGather;)Lcom/co/m2m/base/jms/producor/NotifyMessageProducer;);
aload0
getfield com/co/m2m/alarmgather/CommMessageGather$1.val$interCommMessageBean:com.co.m2m.base.bean.InterCommMessageBean
invokevirtual com/co/m2m/base/jms/producor/NotifyMessageProducer send((Ljava/io/Serializable;)V);
}
L3 {
return
}
L2 {
}
}
}
I tried bytecode-viewer 2.9.8 to open class file ,but none of engine can decompile inner class.for example, using Procyon engine: CommMessageGather.scheduledThreadPoolExecutor.execute((Runnable)new CommMessageGather.CommMessageGather$1(this, interCommMessageBean)); using CFR engine: scheduledThreadPoolExecutor.execute((Runnable)new /* Unavailable Anonymous Inner Class!! */); But I tried both cfr_0_102 and procyon-decompiler-0.5.30,it works well: CommMessageGather.scheduledThreadPoolExecutor.execute(new Runnable() { @Override public void run() { CommMessageGather.this.sendInterCommLogProducer.send((Serializable)interCommMess ageBean); } });