2016-04-28 110 views
-2

我的GuiTest类有问题。错误:错误:在类GUITest中找不到主要方法,请定义主要方法为: public static void main(String [] args) 或者JavaFX应用程序类必须扩展javafx.application.Application。我怎样才能解决这个问题?遇到错误有问题错误:在类GUITest中找不到主要方法

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);   
    } 
} 
} 
+0

香港专业教育学院发现了问题,感谢寻求帮助 –

回答

3

你的主要方法是埋一个内部类的构造函数里面 - 为什么?你所要做的就是修正错误告诉你修正的内容:把它放在主外部类GUITest类中。

永远不要忽略编译器错误信息,事实上解决这个问题和大多数编译器错误的关键是尝试严格地读取错误信息,然后修复它告诉你修复的问题。做到这一点,你会解决这些类型的错误的90%。

你的代码的另一个问题是:你的缩进遍布各处,变化很大,正因为如此,你不会看到你做错了什么。如果你正确和经常地缩进,你很快就会看到你的主要方法如何深深嵌入到错误的课堂中。了解缩进和格式化规则并不是为了让代码看起来很漂亮(尽管它有助于做到这一点),而是可以帮助您更好地理解和调试代码。

举例来说,如果你的代码进行了适当格式化的,你会发现深藏在缩进代码显然埋葬的主要方法:

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 
     } 
    } 
}