程序编译通过了,但命令提示窗口显示错误:Exception in thread "main"java.lang.NosuchMethodError:main
之前发帖弄的那个程序编译得了,但就是运行不了,这是那个编译得了的程序:这个程序是按ShowGraphics.java里的三个按钮分别进入DrwTriangle.java,DrwRectangle.java和CircleFrame.java的界面,再在界面里画三角形,矩形和圆形
这是主界面:
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;import javax.swing.JButton;
import javax.swing.JFrame;public class ShowGraphics extends JFrame {
    JButton a1 = new JButton("画三角形");
    JButton a2 = new JButton("画矩形");
    JButton a3 = new JButton("画圆形");    public ShowGraphics() {
        super("画图小程序");
        setLayout(new FlowLayout());
        add(a1);
        add(a2);
        add(a3);
        setSize(300, 200);
        setVisible(true);        a1.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                 DrwTriangle a=new DrwTriangle();
                 a.getName();
            }
        });        a2.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                 DrwRectangle b=new DrwRectangle();
                 b.getName();
            }
        });
        a3.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                 CircleFrame c=new CircleFrame();
                 c.getName();
            }
        });
    }
}
这是画三角形的:
import java.awt.*; 
import java.awt.event.*; 
import javax.swing.*; 
import javax.swing.event.*; public class DrwTriangle extends JFrame{ 
int z=0; 
int x20=0; 
int y20=0; 
Canvas canvas=new Canvas() { 
public void paint(Graphics g) { 
super.paint(g); 
g.drawPolygon(new int[]{0,z,x20}, new int[]{0,0,y20}, 3); 

};  
JLabel a=new JLabel("a:"); 
JLabel b=new JLabel("b:"); 
JLabel c=new JLabel("c:"); 
JTextField sl1=new JTextField(5); 
JTextField sl2=new JTextField(5); 
JTextField sl3=new JTextField(5); 
JPanel p1=new JPanel(new FlowLayout()); 
private JButton locate=new JButton("确定"); 
public DrwTriangle() {  
p1.add(a); 
p1.add(sl1); 
p1.add(b); 
p1.add(sl2); 
p1.add(c); 
p1.add(sl3); 
p1.add(locate);
canvas.setSize(200,00); 
canvas.setVisible(true); 
locate.addActionListener(new Locate()); 
this.setLayout(new BorderLayout()); 
this.add(p1,"North"); 
this.add(canvas,"Center"); 
this.setSize(480,300); 
this.setVisible(true); 
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

class Locate implements ActionListener { 
public void actionPerformed(ActionEvent e){ 
double i=Double.parseDouble(sl1.getText()); 
double j=Double.parseDouble(sl2.getText()); 
double k=Double.parseDouble(sl3.getText()); 
boolean x,y; 
x=i>0&&j>0&&k>0; 
y=i+j>k&&i+k>j&&j+k>i; 
if(x&&y) { 
double x2,y2,m; 
m=(i*i+j*j-k*k)/(2*i*j); 
if(m>=0) {x2=m*j;y2=Math.sqrt(k*k-(x2-i)*(x2-i));} 
else{x2=m*j+i;y2=Math.sqrt(k*k-(x2-i)*(x2-i));} 
z=(int)i; 
x20=(int)x2; 
y20=(int)y2; 
canvas.repaint(); 
} else JOptionPane.showMessageDialog(DrwTriangle.this, "您输入的三边长不能构成三角形!"); 


public static void main(String[] args) { 
new DrwTriangle(); 

}这是画矩形的:
import java.awt.*; 
import java.awt.event.*; 
import javax.swing.*; 
import javax.swing.event.*;public class DrwRectangle extends JFrame{
int x1=0;
int x2=0;
int y2=0;
int y3=0;
Canvas canvas=new Canvas() {
public void paint(Graphics g) {
super.paint(g);
g.drawPolygon(new int[]{0,x1,x2,0},new int[]{0,0,y2,y3},4);
}
};
JLabel a=new JLabel("a:"); 
JLabel b=new JLabel("b:");  
JTextField sl1=new JTextField(5); 
JTextField sl2=new JTextField(5);  
JPanel p1=new JPanel(new FlowLayout()); 
private JButton locate=new JButton("确定"); 
public DrwRectangle() {  
p1.add(a); 
p1.add(sl1); 
p1.add(b); 
p1.add(sl2);  
p1.add(locate);
canvas.setSize(200,00); 
canvas.setVisible(true); 
locate.addActionListener(new Locate()); 
this.setLayout(new BorderLayout()); 
this.add(p1,"North"); 
this.add(canvas,"Center"); 
this.setSize(480,300); 
this.setVisible(true); 
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
}
class Locate implements ActionListener { 
public void actionPerformed(ActionEvent e){ 
double m=Double.parseDouble(sl1.getText()); 
double n=Double.parseDouble(sl2.getText());  
boolean i,j;
i=m>0;
j=n>0;
if(i&&j)
{x1=(int)m;
x2=(int)m;
y2=(int)n;
y3=(int)n;
canvas.repaint();
}
else JOptionPane.showMessageDialog(DrwRectangle.this,"图形不符合要求");
}
}
public static void main(String[] args) { 
new DrwRectangle(); 

}
这是画圆的:
import java.awt.*; 
import java.awt.event.*; 
import javax.swing.*; class DrawPanel extends JPanel{ 
int diameter; 
public DrawPanel() { 
super(); 
} public void updateDia(int dia){ 
this.diameter = dia ; 
this.updateUI(); 

public void paint(Graphics g){ 
g.setColor(Color.RED); 
int x = Math.max(0, (getWidth() - diameter)/2); 
int y = Math.max(0, (getWidth() - diameter)/2); 
g.drawOval(x,y,diameter,diameter); 

} public class CircleFrame extends JFrame{ 
public static void main(String[] args){ 
new CircleFrame().setVisible(true); 
} JTextField diameterField = new JTextField(); 
JButton submit = new JButton("确定"); 
JLabel diameterLabel = new JLabel("直径 :"); 
DrawPanel drawPanel = new DrawPanel(); 
public static final int BLANK = 30; 
public static final int INIT_SIZE = 200; 
public static final int INFO_HEIGHT = 30; 
public CircleFrame() { 
super("Draw Circle"); 
initPanel(); 
this.setSize(INIT_SIZE ,INIT_SIZE + INFO_HEIGHT); 
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
} private void initPanel() { 
diameterField.setText("0"); 
drawPanel.setSize(INIT_SIZE,INIT_SIZE); 
submit.addActionListener(new ActionListener(){ 
public void actionPerformed(ActionEvent e) { 
updateDrawPanel(); 

}); JPanel infoPanel = new JPanel(); 
infoPanel.setLayout(new BorderLayout()); 
infoPanel.add(diameterLabel,BorderLayout.WEST); 
infoPanel.add(diameterField,BorderLayout.CENTER); 
infoPanel.add(submit,BorderLayout.EAST); getContentPane().setLayout(new BorderLayout()); getContentPane().add(infoPanel,BorderLayout.NORTH); 
getContentPane().add(drawPanel,BorderLayout.CENTER); 
} private void updateDrawPanel(){ 
int dia; 
try { 
dia = Integer.parseInt(diameterField.getText()); 
} catch(Exception e){ 
JOptionPane.showMessageDialog(this,"抛出异常!","wrong",JOptionPane.OK_OPTION); 
return; 

if(dia<0 ){ 
JOptionPane.showMessageDialog(this,"半径不能为负数!","wrong",JOptionPane.OK_OPTION); 
return; 
} int nowSize = Math.max(dia+BLANK, INIT_SIZE); 
drawPanel.updateDia(dia); 
drawPanel.setSize(nowSize,nowSize); 
setSize(new Dimension(nowSize,nowSize+INFO_HEIGHT)); 
this.validate(); 

这四个程序都能编译,后三个可以单独运行,但第一个就运行不了,急求高手指教一下!

解决方案 »

  1.   

    此回复为自动发出,仅用于显示而已,并无任何其他特殊作用
    楼主【RINTO】截止到2008-06-26 19:17:36的历史汇总数据(不包括此帖):
    发帖数:1                  发帖分:20                 
    结贴数:1                  结贴分:20                 
    未结数:0                  未结分:0                  
    结贴率:100.00%            结分率:100.00%            
    敬礼!
      

  2.   

    Exception in thread "main"java.lang.NosuchMethodError:main 不是提示你了吗,没有main方法,main方法是应用程序的入口,运行的时候是自动调用这个main方法,
    你都没有main方法,当然就运行不了了
      

  3.   

    已经告诉你了:Exception in thread "main"java.lang.NosuchMethodError:main ,你的类里没有main方法,定义一个public static void main(String args[])方法执行就可以了
      

  4.   

    是不是在第一个中加:
    public static void main(String[] args) { 
    new ShowGraphics(); 

    是不是这样?
      

  5.   

    需要有main方法,main方法是程序的入口
      

  6.   

    现在主界面能显示了,但问题是点击"画圆"的按钮没有反应,就是不能到达CircleFrame.java的界面,高手们请帮我看看,谢谢了!
      

  7.   


    a3.addActionListener(new ActionListener() { 
                public void actionPerformed(ActionEvent e) { 
                    CircleFrame c=new CircleFrame(); 
                    c.setVisible(true);//加上这句
                    c.getName(); 
                } 
            }); 
      

  8.   

    因为默认是不可见的,就是不显示出来,须调用setVisible(true);才能显示出来
    前面的两个类,在它们的构造方法里有this.setVisible(true);功能一样