求一款好用的反编译工具 以前用的jad158,觉得不错。可这次反编译一个class时(23KB),有一些问题,出现了很多奇怪的符号如“_L5”、“_L2”,还有一些this, continue等语句单独占一行,以及一些goto语句。所以,反编译出来的java文件根本没法用了...哪位大牛能给推荐一两个好些的反编译工具?另,我的class文件是JDK1.5的。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 dj 不错 很好用的 我一直用 msn:[email protected] jad,他唯一一个问题就是反编译那种异常套异常的时候会有问题 用什么都会出现你说的效果这都是反编译造成的 特别是我们在网上下载的项目 都会出现主要都是在 try{}catch(){}finally{} 这些地方出问题你只要经常写项目 就会知道哪些地方该抛出异常 自己就能改了看看这篇文章,对你有些帮助http://blog.csdn.net/z3h/archive/2008/07/11/2640522.aspx或者你可以Google一下java class代码反编译后还原 jad 不错,还有在eclipse中的插件。可以在eclipse中,随意的阅读jar中的class。 jd-gui.exe 我今天正好再该以前的一个项目 就出现了你说的问题现在我就贴出来 供你参考反编译后的代码public User FindByCode(String user_code) throws SQLException { String qstr; Statement stmt; ResultSet rs; User user; qstr = String.valueOf(String.valueOf((new StringBuffer("select ,user_code,user_pin,user_sex,user_duty,user_person,user_email,user_phone,user_address,re1,re2,re3,user_del from USER_TABLE where user_code = '")).append(user_code).append("'"))); stmt = null; rs = null; user = null; SQLException se; try { getConnection(); stmt = dbConnection.createStatement(); for(rs = stmt.executeQuery(qstr); rs.next();) { int i = 1; int user_id = rs.getInt(i++); String user_name1 = rs.getString(i++); String user_code1 = rs.getString(i++); String user_pin1 = rs.getString(i++); String user_sex1 = rs.getString(i++); String user_duty1 = rs.getString(i++); String user_person1 = rs.getString(i++); String user_email1 = rs.getString(i++); String user_phone1 = rs.getString(i++); String user_address1 = rs.getString(i++); String re11 = rs.getString(i++); String re21 = rs.getString(i++); String re31 = rs.getString(i++); String user_del1 = rs.getString(i++); user = new User(user_id, user_name1, user_code1, user_pin1, user_sex1, user_duty1, user_person1, user_email1, user_phone1, user_address1, re11, re21, re31, user_del1); } } 其实是这个位置少了一catch,然后将下面的那两个删掉就好了 finally { closeResultSet(rs); closeStatement(stmt); closeConnection(); } break MISSING_BLOCK_LABEL_372; 这个位置有问题吧 se; System.out.print("userdb find by code fail".concat(String.valueOf(String.valueOf(se.getMessage())))); return user; }这是修改后的代码public User FindByCode(String user_code) throws SQLException { String qstr; Statement stmt; ResultSet rs; User user; qstr = String.valueOf(String.valueOf((new StringBuffer("select user_id,user_name,user_code,user_pin,user_sex,user_duty,user_person,user_email,user_phone,user_address,re1,re2,re3,user_del from USER_TABLE where user_code = '")).append(user_code).append("'"))); stmt = null; rs = null; user = null; try { getConnection(); stmt = dbConnection.createStatement(); for(rs = stmt.executeQuery(qstr); rs.next();) { int i = 1; int user_id = rs.getInt(i++); String user_name1 = rs.getString(i++); String user_code1 = rs.getString(i++); String user_pin1 = rs.getString(i++); String user_sex1 = rs.getString(i++); String user_duty1 = rs.getString(i++); String user_person1 = rs.getString(i++); String user_email1 = rs.getString(i++); String user_phone1 = rs.getString(i++); String user_address1 = rs.getString(i++); String re11 = rs.getString(i++); String re21 = rs.getString(i++); String re31 = rs.getString(i++); String user_del1 = rs.getString(i++); user = new User(user_id, user_name1, user_code1, user_pin1, user_sex1, user_duty1, user_person1, user_email1, user_phone1, user_address1, re11, re21, re31, user_del1); } }catch(SQLException e){ System.out.print("userdb find by code fail".concat(String.valueOf(String.valueOf(e.getMessage())))); } finally { closeResultSet(rs); closeStatement(stmt); closeConnection(); } return user; } 这是另外的一个例子 看了会更晕!!!!这是反编译后的代码private void deleteUser(int user_id) throws SQLException { PreparedStatement stmt; String queryStr; stmt = null; int resultCount = 0; queryStr = "update user_table set user_del = '1' WHERE user_id = ? "; getConnection(); stmt = dbConnection.prepareStatement(queryStr); stmt.setInt(1, user_id); int resultCount = stmt.executeUpdate(); if(resultCount < 1) System.out.print("".concat(String.valueOf(String.valueOf(resultCount)))); SQLException se; 这个位置删掉 try { if(stmt != null) stmt.close(); } // Misplaced declaration of an exception variable catch(SQLException se) { System.out.print(":".concat(String.valueOf(String.valueOf(se.getMessage())))); } break MISSING_BLOCK_LABEL_228; se; System.out.print(":".concat(String.valueOf(String.valueOf(se.getMessage())))); try { if(stmt != null) stmt.close(); } catch(SQLException se) { System.out.print(":".concat(String.valueOf(String.valueOf(se.getMessage())))); } break MISSING_BLOCK_LABEL_228; Exception exception; exception; try { if(stmt != null) stmt.close(); } catch(SQLException se) { System.out.print(":".concat(String.valueOf(String.valueOf(se.getMessage())))); } throw exception; return; }这是改过后的代码private void deleteUser(int user_id) throws SQLException { PreparedStatement stmt; String queryStr; stmt = null; int resultCount = 0; queryStr = "update user_table set user_del = '1' WHERE user_id = ? "; try { getConnection(); stmt = dbConnection.prepareStatement(queryStr); stmt.setInt(1, user_id); resultCount = stmt.executeUpdate(); if(resultCount < 1) System.out.print("".concat(String.valueOf(String.valueOf(resultCount)))); } catch(SQLException se) { System.out.print("".concat(String.valueOf(String.valueOf(se.getMessage())))); }finally{ try { if(stmt != null) stmt.close(); closeConnection(); } catch(SQLException se) { System.out.print("".concat(String.valueOf(String.valueOf(se.getMessage())))); } } }好好看看吧 也许会对你有些帮助 大家都用小颖啊我的这些代码就是用小颖编译后得出的结果有的没问题 有的就有问题就是对异常的处理你先把那些没用的东西都删掉 然后根据自己的经验重新try catch finally 就OK!!了 对象数据是存在堆里的. 我有问题.... js如何向lable控件中写值 用SWING写的程序怎么发布成EXE文件? java 如何激活一个窗口为当前窗口? 关于servlet中udp,错在哪,附代码? 关于异常处理的一个问题.请指教! 小问题,怎么判断这个控件是JTextField呢?请看下面代码 一个APPLET的简单问题 java如何连接另一台服务器上的数据库 大虾救我! 请教:类的继承和合成 一小段程序,有关异常的问题,请分析?
现在我就贴出来 供你参考
反编译后的代码
public User FindByCode(String user_code)
throws SQLException
{
String qstr;
Statement stmt;
ResultSet rs;
User user;
qstr = String.valueOf(String.valueOf((new StringBuffer("select ,user_code,user_pin,user_sex,user_duty,user_person,user_email,user_phone,user_address,re1,re2,re3,user_del from USER_TABLE where user_code = '")).append(user_code).append("'")));
stmt = null;
rs = null;
user = null;
SQLException se;
try
{
getConnection();
stmt = dbConnection.createStatement();
for(rs = stmt.executeQuery(qstr); rs.next();)
{
int i = 1;
int user_id = rs.getInt(i++);
String user_name1 = rs.getString(i++);
String user_code1 = rs.getString(i++);
String user_pin1 = rs.getString(i++);
String user_sex1 = rs.getString(i++);
String user_duty1 = rs.getString(i++);
String user_person1 = rs.getString(i++);
String user_email1 = rs.getString(i++);
String user_phone1 = rs.getString(i++);
String user_address1 = rs.getString(i++);
String re11 = rs.getString(i++);
String re21 = rs.getString(i++);
String re31 = rs.getString(i++);
String user_del1 = rs.getString(i++);
user = new User(user_id, user_name1, user_code1, user_pin1, user_sex1, user_duty1, user_person1, user_email1, user_phone1, user_address1, re11, re21, re31, user_del1);
} } 其实是这个位置少了一catch,然后将下面的那两个删掉就好了
finally
{
closeResultSet(rs);
closeStatement(stmt);
closeConnection();
}
break MISSING_BLOCK_LABEL_372; 这个位置有问题吧
se;
System.out.print("userdb find by code fail".concat(String.valueOf(String.valueOf(se.getMessage()))));
return user;
}这是修改后的代码
public User FindByCode(String user_code)
throws SQLException
{
String qstr;
Statement stmt;
ResultSet rs;
User user;
qstr = String.valueOf(String.valueOf((new StringBuffer("select user_id,user_name,user_code,user_pin,user_sex,user_duty,user_person,user_email,user_phone,user_address,re1,re2,re3,user_del from USER_TABLE where user_code = '")).append(user_code).append("'")));
stmt = null;
rs = null;
user = null;
try
{
getConnection();
stmt = dbConnection.createStatement();
for(rs = stmt.executeQuery(qstr); rs.next();)
{
int i = 1;
int user_id = rs.getInt(i++);
String user_name1 = rs.getString(i++);
String user_code1 = rs.getString(i++);
String user_pin1 = rs.getString(i++);
String user_sex1 = rs.getString(i++);
String user_duty1 = rs.getString(i++);
String user_person1 = rs.getString(i++);
String user_email1 = rs.getString(i++);
String user_phone1 = rs.getString(i++);
String user_address1 = rs.getString(i++);
String re11 = rs.getString(i++);
String re21 = rs.getString(i++);
String re31 = rs.getString(i++);
String user_del1 = rs.getString(i++);
user = new User(user_id, user_name1, user_code1, user_pin1, user_sex1, user_duty1, user_person1, user_email1, user_phone1, user_address1, re11, re21, re31, user_del1);
} }catch(SQLException e){
System.out.print("userdb find by code fail".concat(String.valueOf(String.valueOf(e.getMessage()))));
}
finally
{
closeResultSet(rs);
closeStatement(stmt);
closeConnection();
}
return user;
}
这是反编译后的代码
private void deleteUser(int user_id)
throws SQLException
{
PreparedStatement stmt;
String queryStr;
stmt = null;
int resultCount = 0;
queryStr = "update user_table set user_del = '1' WHERE user_id = ? ";
getConnection();
stmt = dbConnection.prepareStatement(queryStr);
stmt.setInt(1, user_id);
int resultCount = stmt.executeUpdate();
if(resultCount < 1)
System.out.print("".concat(String.valueOf(String.valueOf(resultCount))));
SQLException se; 这个位置删掉
try
{
if(stmt != null)
stmt.close();
}
// Misplaced declaration of an exception variable
catch(SQLException se)
{
System.out.print(":".concat(String.valueOf(String.valueOf(se.getMessage()))));
}
break MISSING_BLOCK_LABEL_228;
se;
System.out.print(":".concat(String.valueOf(String.valueOf(se.getMessage()))));
try
{
if(stmt != null)
stmt.close();
}
catch(SQLException se)
{
System.out.print(":".concat(String.valueOf(String.valueOf(se.getMessage()))));
}
break MISSING_BLOCK_LABEL_228;
Exception exception;
exception;
try
{
if(stmt != null)
stmt.close();
}
catch(SQLException se)
{
System.out.print(":".concat(String.valueOf(String.valueOf(se.getMessage()))));
}
throw exception;
return;
}这是改过后的代码private void deleteUser(int user_id)
throws SQLException
{
PreparedStatement stmt;
String queryStr;
stmt = null;
int resultCount = 0;
queryStr = "update user_table set user_del = '1' WHERE user_id = ? ";
try
{
getConnection();
stmt = dbConnection.prepareStatement(queryStr);
stmt.setInt(1, user_id);
resultCount = stmt.executeUpdate();
if(resultCount < 1)
System.out.print("".concat(String.valueOf(String.valueOf(resultCount))));
}
catch(SQLException se)
{
System.out.print("".concat(String.valueOf(String.valueOf(se.getMessage()))));
}finally{
try
{
if(stmt != null)
stmt.close();
closeConnection();
}
catch(SQLException se)
{
System.out.print("".concat(String.valueOf(String.valueOf(se.getMessage()))));
}
}
}
好好看看吧 也许会对你有些帮助
我的这些代码就是用小颖编译后得出的结果有的没问题 有的就有问题就是对异常的处理你先把那些没用的东西都删掉 然后根据自己的经验重新try catch finally 就OK!!了