欧虫 - 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 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是从前向后顺次执行==立即评价,遇到一个非真立即推出,只有最大开销的情况(三个==的结果都是真的时候)的运算次数和第一个一样多。
因此,第二个写法效率高。
© 2000 - 2024 Rising Corp. Ltd.