java.lang.NoSuchMethodError: main 错误,请教!

WangZWang 2007-10-10 05:32:50
java.lang.NoSuchMethodError: main
Exception in thread "main"
---------------------------------代码如下

import java.io.*;
public class Util extends Object
{
public static int RunThis(String args)
{
Runtime rt = Runtime.getRuntime();
int rc = -1;
try
{
Process p = rt.exec(args);
int bufSize = 4096;
BufferedInputStream bis =
new BufferedInputStream(p.getInputStream(), bufSize);
int len;
byte buffer[] = new byte[bufSize];

while ((len = bis.read(buffer, 0, bufSize)) != -1)
System.out.write(buffer, 0, len);
rc = p.waitFor();
}
catch (Exception e)
{
e.printStackTrace();
rc = -1;
}
finally
{
return rc ;
}
}
}



...全文
14699 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
longren331100 2011-03-01
  • 打赏
  • 举报
回复
求教啊,我也遇到这样的问题
worm_oz 2007-10-11
  • 打赏
  • 举报
回复
这个是你执行命令的账户在Oracle里面没有足够的权限来运行外部命令啊

而且错误提示里面已经给出了怎么赋权限的PL/SQL语句了:
dbms_java.grant_permission('SYSTEM', 'SYS:java.io.FilePermission', '<<ALL FILES>>', 'execute')

用osql执行一遍上面的命令,应该就有权限了

感觉楼主从来不看错误提示
WangZWang 2007-10-11
  • 打赏
  • 举报
回复
--先谢谢上面各位的回答
--上面的语句是在Oracle里面的Java source,但是不能达到预期的结果,

create or replace and compile java source named Util as
import java.io.*;
import java.lang.*;
public class Util extends Object
{
public static int RunThis(String args)
{
Runtime rt = Runtime.getRuntime();
int rc = -1;
try
{
Process p = rt.exec(args);
int bufSize = 4096;
BufferedInputStream bis =
new BufferedInputStream(p.getInputStream(), bufSize);
int len;
byte buffer[] = new byte[bufSize];

while ((len = bis.read(buffer, 0, bufSize)) != -1)
System.out.write(buffer, 0, len);
rc = p.waitFor();
}
catch (Exception e)
{
e.printStackTrace();
rc = -1;
}
finally
{
return rc;
}
}
}

/

create or replace function RUN_CMD(p_cmd in varchar2) return number
as
language java name 'Util.RunThis(java.lang.String) return integer';
/

create or replace procedure RC(p_cmd in varchar2)
as
x number;
begin
x := run_cmd(p_cmd);
end;

/

-- 然后进行调用

SQL> vari x number;
SQL> set serveroutput on
SQL> exec dbms_java.set_output(100000);

PL/SQL procedure successfully completed

SQL> exec :x := RUN_CMD('ipconfig');
java.security.AccessControlException: the Permission (java.io.FilePermission <<ALL FILES>> execute) has not been granted to SYSTEM. The PL/SQL to grant this is dbms_java.grant_permission( 'SYSTEM', 'SYS:java.io.FilePermission', '<<ALL FILES>>', 'execute'
)
at java.security.AccessControlContext.checkPermission(AccessControlContext.java)
at java.security.AccessController.checkPermission(AccessController.java)
at java.lang.SecurityManager.checkPermission(SecurityManager.java)
at oracle.aurora.rdbms.SecurityManagerImpl.checkPermission(SecurityManagerImpl.java)
at java.lang.SecurityManager.checkExec(SecurityManager.java)
at java.lang.Runtime.exec(Runtime.java)
at java.lang.Runtime.exec(Runtime.java)
at java.lang.Runtime.exec(Runtime.java)
at java.lang.Runtime.exec(Runtime.java)
at Util.RunThis(UTIL.java:11)

PL/SQL procedure successfully completed
x
---------
-1
Ami121 2007-10-11
  • 打赏
  • 举报
回复
LZ搞定了没有 报错报的那么明显
ozm5888 2007-10-10
  • 打赏
  • 举报
回复
没有MAIN函数
wangling21908 2007-10-10
  • 打赏
  • 举报
回复
没有MAIN函数.....
可以按照9楼的去做把
xiyuan1999 2007-10-10
  • 打赏
  • 举报
回复
是啊
本来是没有问题的啊

但是LZ是在编译的时候没有问题

运行时就有这个异常的

这个类本来就不是来运行的

而是一个javavbean

被其他的类 方法来调用的

LZ不需要去运行这个程序

编译就可以了
worm_oz 2007-10-10
  • 打赏
  • 举报
回复
据我夜观天象,楼主贴的类实现如下功能:调用一个可执行程序,捕捉该程序的标准输出并用System.out显示出来直到该程序结束

但是楼主试图运行这个类的时候,类文件里面没有提供main入口函数,所以报了java.lang.NoSuchMethodError: main
Exception in thread "main"

原因大家都知道,运行一个Java类文件,需要该类文件提供public static void main(String [] args)的入口函数

其实程序本身没有问题,但是这段代码只是一个工具类,还需要另外一个类来调用RunThis这个静态函数,为了简单起见,我把入口函数直接写到Util类文件里,获得的代码如下

import java.io.*;

public class Util extends Object {

public static void main(String [] args) {
if (args.length >= 1) {
int r = Util.RunThis(args[0]);
System.out.println("Command executed, return code = " + r);
} else {
System.out.println("Usage: java Util <command1> <command2> ... <commandN>");
}
}

public static int RunThis(String args) {
Runtime rt = Runtime.getRuntime();
int rc = -1;
try {
Process p = rt.exec(args);
int bufSize = 4096;
BufferedInputStream bis = new BufferedInputStream(p
.getInputStream(), bufSize);
int len;
byte buffer[] = new byte[bufSize];

while ((len = bis.read(buffer, 0, bufSize)) != -1)
System.out.write(buffer, 0, len);
rc = p.waitFor();
} catch (Exception e) {
e.printStackTrace();
rc = -1;
}
return rc;
}
}

然后随便写一个批处理文件比如1.bat,在命令行执行:java Util 1.bat
运行成功
cl55 2007-10-10
  • 打赏
  • 举报
回复
Util , 看名字感觉这不像是程序的入口,LZ应该把用Util 的类贴上来呀。
micro_e 2007-10-10
  • 打赏
  • 举报
回复
是什么程序啊?调试了~不知道你要输入些什么东西啊?
lanseliuying 2007-10-10
  • 打赏
  • 举报
回复
绝对是没有主函数的原因。
xiyuan1999 2007-10-10
  • 打赏
  • 举报
回复
java.lang.NoSuchMethodError: main
Exception in thread "main"
没有main函数
直接运行
main函数是程序的入口

xiyuan1999 2007-10-10
  • 打赏
  • 举报
回复
没有main函数
karlpan01 2007-10-10
  • 打赏
  • 举报
回复
内容太少,不知道具体哪里错了!多贴些东西出来!
WangZWang 2007-10-10
  • 打赏
  • 举报
回复
不是这个问题,ls可以帮忙调试一下。
lanseliuying 2007-10-10
  • 打赏
  • 举报
回复
没有main函数,运行需要main 函数

62,623

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧