-2

我的 GuiTest 课程有问题。这是错误,“错误:在类 GUITest 中找不到主方法,请将主方法定义为:public static void main(String[] args) 或 JavaFX 应用程序类必须扩展 javafx.application.Application”。我该如何解决这个问题?

    import java.awt.BorderLayout;
    import java.awt.Color;
    import java.awt.FlowLayout;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;

    import javax.swing.JButton;
    import javax.swing.JFrame;
    import javax.swing.JLabel;
    import javax.swing.JPanel;
    //Here i modified this class to add button and implement its action        listener.
   public class GUITest {

static class buttonlistener implements ActionListener
{
JFrame l1 ;
buttonlistener(JFrame l1)
{
this.l1 = l1;


public static void main(String[] args){
    final JFrame f=new JFrame();
    f.setLayout(new BorderLayout());
    f.add(new PatternPanel());
    f.setSize(500,500);
    f.setVisible(true);
    f.setBackground(Color.CYAN);
    f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    JPanel buttonPanel = new JPanel();
    buttonPanel.setLayout(new FlowLayout(FlowLayout.RIGHT));
    JButton b1 = new JButton("change color");
    b1.addActionListener(new ActionListener(){

        public void actionPerformed(ActionEvent ae)
        {
            f.setLayout(new BorderLayout());
            f.add(new CircleTile());
            f.setSize(500,500);
            f.setVisible(true);
            f.setBackground(Color.CYAN);
            f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            repaint();
        }
        });
          ;
          buttonPanel.add(b1);
          f.add(buttonPanel,BorderLayout.SOUTH);


    }

}

protected void repaint() {
    // TODO Auto-generated method stub

}

@Override
public void actionPerformed(ActionEvent e) {
    // TODO Auto-generated method stub

        }   
     }
    }




    import java.awt.Graphics;
``  import java.awt.Color;
    import javax.swing.*;
    import java.awt.Graphics2D;

   public class PatternPanel extends JPanel {
    int i,j,x,y;
    @Override
    public void paint(Graphics g){
    Graphics2D g1=(Graphics2D)g;        
    g1.setColor(Color.GREEN);       
    g1.fillRect(0,0,100,100);
    g1.drawRect(0,0,100,100);
    g1.setColor(Color.BLACK);
    g1.drawOval(0,0,100,100);
    g1.setColor(Color.YELLOW);
    g1.fillOval(0,0,100,100);
    g1.setColor(Color.BLACK);
    g1.drawOval(10,10,80,80);   
    g1.drawOval(20,20,60,60);       
    g1.drawOval(30,30,40,40);       
    g1.drawOval(40,40,20,20);
    g1.drawLine(50,0,50,100);
    g1.drawLine(0,50,100,50);
    for(i=0;i<3;i++){           
        x=0 + 50*i;
        g1.drawLine(x,0,x,0+100);           
    }
    for(i=0;i<3;i++){           
        y=0 + 50*i;
        g1.drawLine(0,y,0+100,y);           
    }

    //2nd Block
    g1.setColor(Color.GREEN);       
    g1.fillRect(10,120,120,120);
    g1.drawRect(10,120,120,120);                
    for(i=0;i<5;i++){
        y=120 + 24*i;
        for(j=0;j<5;j++){
            x=10 + 24*j;
            g1.setColor(Color.BLACK);
            g1.drawOval(x,y,24,24);
            g1.setColor(Color.YELLOW);
            g1.fillOval(x,y,24,24);
            g1.setColor(Color.BLACK);
            g1.drawOval(x + 3,y + 3,18,18);
            g1.drawOval(x + 6,y + 6,12,12);
            g1.drawOval(x + 9,y + 9,6,6);               
        }                           
    }
    for(i=0;i<11;i++){          
        x=10 + 12*i;
        g1.drawLine(x,120,x,120+120);           
    }
    for(i=0;i<11;i++){          
        y=120 + 12*i;
        g1.drawLine(10,y,10+120,y);         
    }       

    //3rd Block
    g1.setColor(Color.GREEN);       
    g1.fillRect(150,20,240,240);
    g1.drawRect(150,20,240,240);                
    for(i=0;i<6;i++){
        y=20 + 40*i;
        for(j=0;j<6;j++){
            x=150 + 40*j;
            g1.setColor(Color.BLACK);
            g1.drawOval(x,y,40,40);
            g1.setColor(Color.YELLOW);
            g1.fillOval(x,y,40,40);
            g1.setColor(Color.BLACK);
            g1.drawOval(x + 4,y + 4,32,32);
            g1.drawOval(x + 8,y + 8,24,24);
            g1.drawOval(x + 12,y + 12,16,16);
            g1.drawOval(x + 16,y + 16,8,8);             
        }               
    }
    for(i=0;i<13;i++){          
        x=150 + 20*i;
        g1.drawLine(x,20,x,20+240);         
    }
    for(i=0;i<13;i++){          
        y=20 + 20*i;
        g1.drawLine(150,y,150+240,y);           
    }

    //4th Block
    g1.setColor(Color.GREEN);       
    g1.fillRect(130,275,108,108);
    g1.drawRect(130,275,108,108);               
    for(i=0;i<3;i++){
        y=275 + 36*i;
        for(j=0;j<3;j++){
            x=130 + 36*j;
            g1.setColor(Color.BLACK);
            g1.drawOval(x,y,36,36);
            g1.setColor(Color.YELLOW);
            g1.fillOval(x,y,36,36);
            g1.setColor(Color.BLACK);
            g1.drawOval(x + 6,y + 6,24,24);
            g1.drawOval(x + 12,y + 12,12,12);                               
        }               
    }
    for(i=0;i<7;i++){           
        x=130 + 18*i;
        g1.drawLine(x,275,x,275+108);           
    }
    for(i=0;i<7;i++){           
        y=275 + 18*i;
        g1.drawLine(130,y,130+108,y);           
    }       
}

}

              import java.awt.Graphics;
import java.awt.Color;

import javax.swing.*;

import java.awt.Graphics2D;
public class CircleTile extends JPanel {
int i,j,x,y;
@Override
public void paint(Graphics g){
    Graphics2D g1=(Graphics2D)g;        
    g1.setColor(Color.GREEN);       
    g1.fillRect(0,0,100,100);
    g1.drawRect(0,0,100,100);
    g1.setColor(Color.BLACK);
    g1.drawOval(0,0,100,100);
    g1.setColor(Color.YELLOW);
    g1.fillOval(0,0,100,100);
    g1.setColor(Color.BLACK);
    g1.drawOval(10,10,80,80);   
    g1.drawOval(20,20,60,60);       
    g1.drawOval(30,30,40,40);       
    g1.drawOval(40,40,20,20);
    g1.drawLine(50,0,50,100);
    g1.drawLine(0,50,100,50);
    for(i=0;i<3;i++){           
        x=0 + 50*i;
        g1.drawLine(x,0,x,0+100);           
    }
    for(i=0;i<3;i++){           
        y=0 + 50*i;
        g1.drawLine(0,y,0+100,y);           
    }

    //2nd Block
    g1.setColor(Color.GRAY);        
    g1.fillRect(10,120,120,120);
    g1.drawRect(10,120,120,120);                
    for(i=0;i<5;i++){
        y=120 + 24*i;
        for(j=0;j<5;j++){
            x=10 + 24*j;
            g1.setColor(Color.BLACK);
            g1.drawOval(x,y,24,24);
            g1.setColor(Color.YELLOW);
            g1.fillOval(x,y,24,24);
            g1.setColor(Color.BLACK);
            g1.drawOval(x + 3,y + 3,18,18);
            g1.drawOval(x + 6,y + 6,12,12);
            g1.drawOval(x + 9,y + 9,6,6);               
        }                           
    }
    for(i=0;i<11;i++){          
        x=10 + 12*i;
        g1.drawLine(x,120,x,120+120);           
    }
    for(i=0;i<11;i++){          
        y=120 + 12*i;
        g1.drawLine(10,y,10+120,y);         
    }       

    //3rd Block
    g1.setColor(Color.BLUE);        
    g1.fillRect(150,20,240,240);
    g1.drawRect(150,20,240,240);                
    for(i=0;i<6;i++){
        y=20 + 40*i;
        for(j=0;j<6;j++){
            x=150 + 40*j;
            g1.setColor(Color.BLACK);
            g1.drawOval(x,y,40,40);
            g1.setColor(Color.RED);
            g1.fillOval(x,y,40,40);
            g1.setColor(Color.BLACK);
            g1.drawOval(x + 4,y + 4,32,32);
            g1.drawOval(x + 8,y + 8,24,24);
            g1.drawOval(x + 12,y + 12,16,16);
            g1.drawOval(x + 16,y + 16,8,8);             
        }               
    }
    for(i=0;i<13;i++){          
        x=150 + 20*i;
        g1.drawLine(x,20,x,20+240);         
    }
    for(i=0;i<13;i++){          
        y=20 + 20*i;
        g1.drawLine(150,y,150+240,y);           
    }

    //4th Block
    g1.setColor(Color.GRAY);        
    g1.fillRect(130,275,108,108);
    g1.drawRect(130,275,108,108);               
    for(i=0;i<3;i++){
        y=275 + 36*i;
        for(j=0;j<3;j++){
            x=130 + 36*j;
            g1.setColor(Color.BLACK);
            g1.drawOval(x,y,36,36);
            g1.setColor(Color.PINK);
            g1.fillOval(x,y,36,36);
            g1.setColor(Color.BLACK);
            g1.drawOval(x + 6,y + 6,24,24);
            g1.drawOval(x + 12,y + 12,12,12);                               
        }               
    }
    for(i=0;i<7;i++){           
        x=130 + 18*i;
        g1.drawLine(x,275,x,275+108);           
    }
    for(i=0;i<7;i++){           
        y=275 + 18*i;
        g1.drawLine(130,y,130+108,y);           
    }   
}
}  
4

1 回答 1

3

您的 main 方法隐藏在内部类的构造函数中——为什么?您所要做的就是修复错误告诉您要修复的内容:将其放入主外部类 GUITest 类中。

永远不要忽略编译器错误消息,事实上,解决这个问题和大多数编译器错误的关键是尝试批判性地阅读错误消息,然后修复它告诉你要修复的内容。这样做,您将修复 90% 的此类错误。

您的代码的另一个问题:您的缩进到处都是,变化很大,正因为如此,您看不到自己做错了什么。如果您正确且定期地缩进,您会很快看到您的 main 方法是如何深深嵌入错误的类中的。了解缩进和格式化规则并不是为了让代码看起来更漂亮(尽管它有助于做到这一点),而是为了帮助您更好地理解和调试代码一目了然。

例如,如果您的代码格式正确,您会发现 main 方法显然深埋在缩进代码中:

public class GUITest {

    static class buttonlistener implements ActionListener {
        JFrame l1 ;
        buttonlistener(JFrame l1) {
            this.l1 = l1;

            // ***** here is your main method, where it does not belong
            public static void main(String[] args){
                final JFrame f=new JFrame();
                f.setLayout(new BorderLayout());
                f.add(new PatternPanel());
                f.setSize(500,500);
                f.setVisible(true);
                f.setBackground(Color.CYAN);
                f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

                JPanel buttonPanel = new JPanel();
                buttonPanel.setLayout(new FlowLayout(FlowLayout.RIGHT));
                JButton b1 = new JButton("change color");
                b1.addActionListener(new ActionListener() {
                    public void actionPerformed(ActionEvent ae) {
                        f.setLayout(new BorderLayout());
                        f.add(new CircleTile());
                        f.setSize(500,500);
                        f.setVisible(true);
                        f.setBackground(Color.CYAN);
                        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                        repaint();
                    }
                });
                buttonPanel.add(b1);
                f.add(buttonPanel,BorderLayout.SOUTH);
            }
        }

        protected void repaint() {
            // TODO Auto-generated method stub
        }

        @Override
        public void actionPerformed(ActionEvent e) {
            // TODO Auto-generated method stub
        }   
    }
}

所以修复它:

public class GUITest {

    // ***** So move it to where it now does  belong
    public static void main(String[] args){
        final JFrame f=new JFrame();
        f.setLayout(new BorderLayout());
        f.add(new PatternPanel());
        f.setSize(500,500);
        f.setVisible(true);
        f.setBackground(Color.CYAN);
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        JPanel buttonPanel = new JPanel();
        buttonPanel.setLayout(new FlowLayout(FlowLayout.RIGHT));
        JButton b1 = new JButton("change color");
        b1.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent ae) {
                f.setLayout(new BorderLayout());
                f.add(new CircleTile());
                f.setSize(500,500);
                f.setVisible(true);
                f.setBackground(Color.CYAN);
                f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                repaint();
            }
        });
        ;
        buttonPanel.add(b1);
        f.add(buttonPanel,BorderLayout.SOUTH);
    }    

    static class buttonlistener implements ActionListener {
        JFrame l1 ;
        buttonlistener(JFrame l1) {
            this.l1 = l1;
        }

        protected void repaint() {
            // TODO Auto-generated method stub
        }

        @Override
        public void actionPerformed(ActionEvent e) {
            // TODO Auto-generated method stub
        }   
    }
}
于 2016-04-28T02:20:49.100 回答