程序编译通过了,但命令提示窗口显示错误: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();
}
这四个程序都能编译,后三个可以单独运行,但第一个就运行不了,急求高手指教一下!
之前发帖弄的那个程序编译得了,但就是运行不了,这是那个编译得了的程序:这个程序是按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();
}
这四个程序都能编译,后三个可以单独运行,但第一个就运行不了,急求高手指教一下!
楼主【RINTO】截止到2008-06-26 19:17:36的历史汇总数据(不包括此帖):
发帖数:1 发帖分:20
结贴数:1 结贴分:20
未结数:0 未结分:0
结贴率:100.00% 结分率:100.00%
敬礼!
你都没有main方法,当然就运行不了了
public static void main(String[] args) {
new ShowGraphics();
}
是不是这样?
a3.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
CircleFrame c=new CircleFrame();
c.setVisible(true);//加上这句
c.getName();
}
});
前面的两个类,在它们的构造方法里有this.setVisible(true);功能一样