求高手点拨一个Java的“异常问题”...

请教一Java问题 2013-09-25 06:35:57
高手,您好:
我写了一个“提示用户信息”的类文件,源代码如下:
package c_port_packageTeacher;

import java.io.IOException;
import java.net.Socket;
import java.net.UnknownHostException;

import javax.swing.JButton;

public class MyJButtonPayForSysProduct extends JButton{
/**
*
*/
private static final long serialVersionUID = 1L;
Socket s;
public MyJButtonPayForSysProduct(String name){
super(name);
try {
s = new Socket(Recv.D_PORT_SERVER,9999);
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
PayforTheSoftWareOfDevelopmenter(s);
}
}

其中的第26行代码中的“PayforTheSoftWareOfDevelopmenter类的代码如下:
package c_port_packageTeacher;

import java.awt.BorderLayout;
import java.awt.Font;
import java.awt.Rectangle;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.Socket;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;

public class PayforTheSoftWareOfDevelopmenter extends JFrame implements ActionListener{
/**
*
*/
private static final long serialVersionUID = 1L;
Socket so1 = null;
JPanel jp = new JPanel();
JButton jb0 = new JButton("提交注册码");
JTextField jtf = new JTextField();
static JLabel jL = new JLabel("请输入您9位系统服务授权验证码获得系统的在线资源的服务,购买地址:您所在的银川市新二中教务处购买");
DataOutputStream dops = null;
Integer MyMemNum = -1;
String MyMemNumStr = null;

public PayforTheSoftWareOfDevelopmenter(Socket s1){
so1 = s1;
Font fnt = new Font("华文中宋",0,18);
jb0.setFont(fnt);
jL.setFont(fnt);
this.setTitle("请输入授权码获得产品使用权");
jb0.setEnabled(false);
jtf.addKeyListener(new KeyAdapter(){
public void keyTyped(KeyEvent evt) {

String content = jtf.getText();
int typenum = content.length();
if(typenum==9){
jb0.setEnabled(true);
}}
});
jp.setLayout(new BorderLayout());
jp.add(jL,BorderLayout.NORTH);
jp.add(jb0,BorderLayout.CENTER);
jp.add(jtf,BorderLayout.SOUTH);
jp.setBounds(new Rectangle(400,300,400,300));
this.add(jp);
this.setVisible(true);
}

public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
String MyPersonality = jtf.getText();
try {
dops = new DataOutputStream(so1.getOutputStream());
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
MyMemNumStr = String.valueOf(Recv.MySystemserialnum);
int length = MyMemNumStr.length();
if(length==1){
MyMemNumStr = "00"+MyMemNumStr;
}
if(length==2){
MyMemNumStr = "0"+MyMemNumStr;
}
int len = MyPersonality.length();
if(len == 9){
jb0.setEnabled(true);
try {
dops.writeUTF("11##"+MyMemNumStr+"%%"+MyPersonality);
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
}


}

但是,系统报出的错误如下:

求高手点拨:
错误怎么修改,是什么原因造成的...
谢谢高手!!
一位求知者
2013年9月25日早晨6点35分
...全文
157 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
sunnylz86 2013-09-25
  • 打赏
  • 举报
回复
你的这个程序,PayforTheSoftWareOfDevelopmenter(s), 由于只是一个函数名字并且带有参数s,则Java默认为这只是一个普通函数!而显然,在你的MyJButtonPayForSysProduct类中没有这个函数,于是,他报错,并提示你“create method PayforTheSoftWareOfDevelopmenter” 。
末日哥 2013-09-25
  • 打赏
  • 举报
回复
低级错误啊。。
weidu23 2013-09-25
  • 打赏
  • 举报
回复
朋友,是这样的: 构造函数和别的函数不一样的地方就在于,构造函数是“构建”类所需要的! 于是,我们在使用构造函数创建类时,需要加上new 。 这区别的普通的函数。 普通函数的调用,只要函数名就好了,比如fun(s),而构造函数,则要new Test(s)这种写法! --------------------------- 1、为什么会报错: 你的这个程序,PayforTheSoftWareOfDevelopmenter(s), 由于只是一个函数名字并且带有参数s,则Java默认为这只是一个普通函数!而显然,在你的MyJButtonPayForSysProduct类中没有这个函数,于是,他报错,并提示你“create method PayforTheSoftWareOfDevelopmenter” 。 2、怎么修改: 由于计算机“误会了”你的意图,所以,你只要消除这个“误会”就好了。 正如前面说的,构造一个类,加上new ! 3、修改: 你的第26行改为:new PayforTheSoftWareOfDevelopmenter(s)
breaking236 2013-09-25
  • 打赏
  • 举报
回复
new PayforTheSoftWareOfDevelopmenter(s)
桃园闲人 2013-09-25
  • 打赏
  • 举报
回复
PayforTheSoftWareOfDevelopmenter这是个类呀!不是方法,26行怎么能直接调用了?需要new PayforTheSoftWareOfDevelopmenter(s)才可以。
马达马达达 2013-09-25
  • 打赏
  • 举报
回复
public PayforTheSoftWareOfDevelopmenter(Socket s1) 这个是构造方法,是创建对象时才调用的。 new PayforTheSoftWareOfDevelopmenter(s)这么写就不报错了
ghostkngiht 2013-09-25
  • 打赏
  • 举报
回复
s没初始化,Socket s;改成Socket s = null;试试.
  • 打赏
  • 举报
回复
真诚地感谢诸位朋友的相助!! 真诚地感谢CSDN!!我的大学!! weidu23哥,感谢您付出的心血!!感谢7位为我带来知识的朋友!! 希望你们能够同意我将主要的分数,呈送给weidu23哥了!! 剩下的分数,弟我,按照诸位哥的贡献,进行了分配,希望大家能够继续帮助我,启发我,提点我!! CSDN!!加油!!加油!!加油!!!!!! 蒋校长!!您是中国开发者的共同的盟主!! 请一定将CSDN,办得更漂亮!!更成功!!

62,615

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧