一个编译问题,请高手帮忙!

宁静以致远_2020 2004-06-23 05:48:43
import java.applet.*;
import java.awt.*;
import java.awt.event.*;
class Mycanvas extends Canvas
{
int x,y;
Mycanvas(int a,int b)

{
x=a;
y=b;
getSize();
}
public void paint(Graphics g)
{
g.setColor(Color.red);
g.fillOval(50,50,4*x,4*y);
g.drawString("气球已吹第"+x+"口气",20,350);

}
public Dimension getPreferredSize()

{
return new Dimension(200,100);

}
}
public class Example12_2 extends Applet implements ActionListener

{
CardLayout mycard;
Button button1,button2,button3;
Mycanvas mycanvas[];
Panel p;
Panel p2;
public void init()
{
setLayout(new BorderLayout());
mycard=new CardLayout();
p=new Panel();

p2=new Panel();

p.setLayout(mycard);

button1=new Button("吹第一口气");

button2=new Button("再吹");

button3=new Button("吹最后一口气");

mycanvas=new Mycanvas[81];

for (int i=1;i<=80;i++)

{

mycanvas[i]=new Mycanvas(i,i);

p.add("I am"+i,mycanvas[i]);

}

button1.addActionListener(this);

button2.addActionListener(this);

button3.addActionListener(this);

p2.add(button1);

p2.add(button2);

p2.add(button3);

add(p,"Center");

add(p2,"South");

}

public void actionPerformed(ActionEvent e)

{

if(e.getSource()==button1)

{

mycard.first(p);

}

else if(e.getSource()==button2)

{

mycard.next(p);

}

else if(e.getSource()==button3)

{

mycard.last(p);

}

}

}
编译时提示:Exception in thread "main" java.lang.NoClassDefFoundError:com/sun/tools/javac/Main
我的环境设置如下:set path=C:\j2sdk1.4.2_04\bin;C:\j2sdk1.4.2_04\jre\bin
set classpath=.;C:\j2sdk1.4.2_04\lib;C:\j2sdk1.4.2_04\jre\lib;C:\j2sdk1.4.2_04\lib\tools.jar
请问这是什么原因,该如何解决,谢谢!!!
...全文
171 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
这好象不是程序的问题,好象是jsdk的问题,因为javac这个命令在d:\下都能正确显示,但进了d:\java这个目录,就出现上面的问题,我想应该是jsdk的问题,这如何解决呢?
  • 打赏
  • 举报
回复
我式过,不行啊!!!
smallcosmos 2004-07-01
  • 打赏
  • 举报
回复
我用意Znet(臧圩人) 的看法,
你的是个Applet需要在浏览器里执行的
  • 打赏
  • 举报
回复
而且在d:\下都能正确显示,但进了d:\java这个目录,就出现上面的问题,不知是什么原因。
Znet 2004-07-01
  • 打赏
  • 举报
回复
我编译了一下。
编译的时候是没有错误的!!
你说的那个错误在运行的时候才出现。
但是这是个Applet,你是不能像普通的类一样运行它的!!
必须编译后在AppletViewer或浏览器中运行它。
AppletViewer是jdk自带的测试Applet的工具,你用它试试。
  • 打赏
  • 举报
回复
而且在windows下输入javac时,能正常显示其javac的一些命令介绍。我的程序放在d:\java里的,一进入这个目录后,只输入javac这个命令,就出现“Exception in thread "main" java.lang.NoClassDefFoundError:com/sun/tools/javac/Main“提示,这是什么原因呢?
smallcosmos 2004-06-29
  • 打赏
  • 举报
回复
上面不是有人给你说了吗?
CLASSPATH有问题:
classpath=.;C:\j2sdk1.4.2\lib\dt.jar;C:\j2sdk1.4.2\lib\tools.jar;
  • 打赏
  • 举报
回复
我重装了jdk,还是不行,还是出现同样的问题。不但这个程序,别的程序在我的另一台机器上都能编译的,在这台机器还是出现同样的问题,不知是什么原因?
yxlleslie 2004-06-25
  • 打赏
  • 举报
回复
Example12_2.java 文件内容如下:

import java.applet.*;
import java.awt.*;
import java.awt.event.*;
class Mycanvas extends Canvas
{
int x,y;
Mycanvas(int a,int b)

{
x=a;
y=b;
getSize();
}
public void paint(Graphics g)
{
g.setColor(Color.red);
g.fillOval(50,50,4*x,4*y);
g.drawString("气球已吹第"+x+"口气",20,350);

}
public Dimension getPreferredSize()

{
return new Dimension(200,100);

}
}
public class Example12_2 extends Applet implements ActionListener

{
CardLayout mycard;
Button button1,button2,button3;
Mycanvas mycanvas[];
Panel p;
Panel p2;
public void init()
{
setLayout(new BorderLayout());
mycard=new CardLayout();
p=new Panel();

p2=new Panel();

p.setLayout(mycard);

button1=new Button("吹第一口气");

button2=new Button("再吹");

button3=new Button("吹最后一口气");

mycanvas=new Mycanvas[81];

for (int i=1;i<=80;i++)

{

mycanvas[i]=new Mycanvas(i,i);

p.add("I am"+i,mycanvas[i]);

}

button1.addActionListener(this);

button2.addActionListener(this);

button3.addActionListener(this);

p2.add(button1);

p2.add(button2);

p2.add(button3);

add(p,"Center");

add(p2,"South");

}

public void actionPerformed(ActionEvent e)

{

if(e.getSource()==button1)

{

mycard.first(p);

}

else if(e.getSource()==button2)

{

mycard.next(p);

}

else if(e.getSource()==button3)

{

mycard.last(p);

}

}

}

Example12_2.html 内容为:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=GBK">
<title>
HTML Test Page
</title>
</head>
<body>
Example12_2 will appear below in a Java enabled browser.<br>
<applet
codebase = "."
code = "Example12_2.class"
name = "TestApplet"
width = "400"
height = "300"
hspace = "0"
vspace = "0"
align = "middle"
>
</applet>
</body>
</html>

把它们放在c:\下, javac Example12_2.java 编译正常。
然后 appletviewer Example12_2.html即可出现需要结果。

怀疑这个错误有三种可能:
1.jdk没有装好;
2.环境变量设置;
3.Exampel12_2同目录下的其他文件的错误.

yxlleslie 2004-06-25
  • 打赏
  • 举报
回复
我这里编译没有问题.运行也正常
我的环境变量是:classpath=.;C:\j2sdk1.4.2\lib\dt.jar;C:\j2sdk1.4.2\lib\tools.jar;
  • 打赏
  • 举报
回复
我现在的环境设置如下:
set path=C:\j2sdk1.4.2_04\bin;C:\j2sdk1.4.2_04\jre\bin
set classpath=.;C:\j2sdk1.4.2_04\lib;C:\j2sdk1.4.2_04\jre\lib;C:\j2sdk1.4.2_04\jre\lib\rt.jar
可还是不行,还是出现了如下提示:
Exception in thread "main" java.lang.NoClassDefFoundError:com/sun/tools/javac/Main
请各位高手帮忙解决这个问题,谢谢!!!

lqtflwg718 2004-06-24
  • 打赏
  • 举报
回复
你没有写main方法啊!
  • 打赏
  • 举报
回复
这是小程序,不是应用程序,我编译的也是Example12_2.java,但编译时出现Exception in thread "main" java.lang.NoClassDefFoundError:com/sun/tools/javac/Main错误,不知是什么原因,我想是不是环境设置有问题啊?
zmybest 2004-06-24
  • 打赏
  • 举报
回复
applet编译没问题吧,运行用appletviewer运行
wandou999 2004-06-24
  • 打赏
  • 举报
回复
把RT.JAR加进去即可
shuneng 2004-06-23
  • 打赏
  • 举报
回复
这是运行时错吧?不一定要MAIN才编译的啊
tan_jianhui 2004-06-23
  • 打赏
  • 举报
回复
在public class Example12_2中加上:
public static void main(String[] args){
//函数体
}
tan_jianhui 2004-06-23
  • 打赏
  • 举报
回复
好像是 你 没有写主函数吧。
Arias 2004-06-23
  • 打赏
  • 举报
回复
是不是你把文件的命名搞错那!
不会是命名为:Mycanvas.java吧!(它不是主要类不能以此命名)

应该为:Example12_2.java(注意你设置的它才是public类!)

我编译是没有问题的。执行就不知道那!

62,623

社区成员

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

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