瑞星卡卡安全论坛

首页 » 技术交流区 » 系统软件 » 关于...java.lang.NoSuchMethodError:【求助】
欧虫 - 2005-7-27 15:13:00
--------------------------------------------------------------------------------

出现这以下错误
Exception in thread “main”java.lang.NoSuchMethodError:ButtonListener:method<init><>V not found
At GUI.<init><GUI.java:13>
At gui1.main<gui1.java:4>

哈哈,,,已经搞了好久还没解决,于是上来找大家帮忙了。


相关三个等程序代码如下:

import java.awt.*; //begin GUI.java
import javax.swing.*;
class GUI extends JFrame
{

JButton btn1=new JButton("Button1");
......

ButtonListener btnListener=new ButtonListener();

GUI()
{
Container c=getContentPane();
c.setLayout(null);
......

c.add(btn1);

btn1.addActionListener(btnListener);

btn1.setBounds(130,30,200,40);


setSize(380,200);
setTitle("GUI Demo with no Listeners");
setVisible(true);
setResizable(false);
}
}//end of GUI.java


import java.awt.*; //begin ButtonListener.java
import java.awt.event.*;
import javax.swing.*;

public class ButtonListener implements ActionListener
{
GUI x;
//下面定义一个构造函数,这样后面的 x.btn2.setText("I Love Java");才能通过

ButtonListener(GUI a) {x=a;}

public void actionPerformed(ActionEvent e)

{

if(e.getActionCommand().equals("Button1"))
{
System.out.println("Button1 has been clicked");
x.btn2.setText("I Love Java");

}
}
} //end of ButtonListener.java



//begin gui1.java
class gui1{
public static void main(String args[])
{
GUI x= new GUI();

}
}
//end of gui1.java
欧虫 - 2005-7-28 10:01:00

麻烦大家了
因为我刚学,什么都还不清楚,所以只能是“先人为我等我”待熟悉了再“我为人人”了
到现在为止我还只是问问题,真不好意思
欧虫 - 2005-7-28 11:35:00
因为ButtonListener.java中构造函数  ButtonListener(GUI a) {x=a;}带有参数

所以把GUI.java 中的 ButtonListener btnListener=new ButtonListener();
改为了ButtonListener btnListener=new ButtonListener(this);也就是说增加参数。


但又出现了以下错误
ButtonListener btnListener=new ButtonListener(this);GUI.java:13:cannot resolve symbol
symbol:constructor ButtonListener<GUI>
location:class ButtonListener
ButtonListener btnListener=new ButtonListener<this>

若把this 改为 new GUI()
错误同类
欧虫 - 2005-7-28 12:36:00
if (x%2==0 & x%7==0 & x%5==0) { y++;}与
if (x%2==0 && x%7==0 && x%5==0) { y++;}相比后者效率高,何解呢?
数码出版 - 2005-7-28 13:17:00
引用:
【欧虫的贴子】
麻烦大家了
因为我刚学,什么都还不清楚,所以只能是“先人为我等我”待熟悉了再“我为人人”了
到现在为止我还只是问问题,真不好意思
...........................

在GUI()前头加一个public看看呢?
欧虫 - 2005-7-28 13:41:00
【回复“数码出版”的帖子】谢谢你,已经没那个提示了,不过提示栈溢出吗这里是:Exception in thread "main"java.lang.StackOverflowError

欧虫 - 2005-7-28 13:42:00
现在我的程序改为:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class ButtonListener implements ActionListener
{
GUI x;

ButtonListener(GUI a) {x=a;}

public void actionPerformed(ActionEvent e)

{

if(e.getActionCommand().equals("Button1"))
{
System.out.println("Button1 has been clicked");
x.btn2.setText("I Love Java");
}
if(e.getActionCommand().equals("Button2"))
{
System.out.println("Button2 has been clicked");
}

}
}
欧虫 - 2005-7-28 13:42:00
import java.awt.*;
import javax.swing.*;
class GUI extends JFrame
{
 
  JButton btn1=new JButton("Button1");
  JButton btn2=new JButton("Button2");
  JRadioButton radYes=new JRadioButton("Yes",true);
  JRadioButton radNo=new JRadioButton("No",false);

  ButtonGroup radioGroup1=new ButtonGroup();
  RadioButtonListener rbListener=new RadioButtonListener();
  ButtonListener btnListener=new ButtonListener(new GUI());

  public GUI()
  {
    Container c=getContentPane();
    c.setLayout(null);
 

    c.add(btn1);
    c.add(btn2);
    c.add(radYes);
    c.add(radNo);

    radYes.addActionListener(rbListener);
    radNo.addActionListener(rbListener);
    btn1.addActionListener(btnListener);
    btn2.addActionListener(btnListener);


    radioGroup1.add(radYes);
    radioGroup1.add(radNo);

  radYes.setBounds(30,30,50,40);
  radNo.setBounds(30,80,50,40);
  btn1.setBounds(130,30,200,40);
  btn2.setBounds(130,80,200,40);


  setSize(380,200);
  setTitle("GUI Demo with no Listeners");
  setVisible(true);
  setResizable(false);
    }
}
欧虫 - 2005-7-28 13:45:00
class gui1{
  public static void main(String args[])
  {
    GUI x= new GUI();

  }
}


分别是:
ButtonListener.java
GUI.java
gui1.java
数码出版 - 2005-7-28 13:52:00
引用:
【欧虫的贴子】【回复“数码出版”的帖子】谢谢你,已经没那个提示了,不过提示栈溢出吗这里是:Exception in thread "main"java.lang.StackOverflowError


...........................

在GUI内部,给自己安装Listener的时候new了GUI?
在GUI内部传自己this看看。
可能是GUI被new的时候,new操作中又new了GUI了。
直到堆栈空间用光。
欧虫 - 2005-7-28 14:05:00
【回复“数码出版”的帖子】
我把ButtonListener btnListener=new ButtonListener(new GUI());
改为了ButtonListener btnListener=new ButtonListener(this);

现在一问题都解决了
真谢谢你了!
嗯得好好想想
数码出版 - 2005-7-28 14:34:00
引用:
【欧虫的贴子】if (x%2==0 & x%7==0 & x%5==0) { y++;}与
if (x%2==0 && x%7==0 && x%5==0) { y++;}相比后者效率高,何解呢?
...........................

研究得精细呀
x%2==0 & x%7==0 & x%5==0 需要把三个==运算的三个布尔值经过两次逻辑与运算之后的布尔值由if判断真假。
而x%2==0 && x%7==0 && x%5==0是从前向后顺次执行==立即评价,遇到一个非真立即推出,只有最大开销的情况(三个==的结果都是真的时候)的运算次数和第一个一样多。
因此,第二个写法效率高。
1
查看完整版本: 关于...java.lang.NoSuchMethodError:【求助】