代码没什么问题,编译是可以通过的。
但是可能报错的原因很多,首先客户端开了吗?通信连上了吗。其次finally里面is,os,soc是不是Null呢,空对象调用方法?这个我就不解释了吧。
最好DEBUG下,看看错误是什么,在确定是什么原因导致的
import javaawt;
import javaawtevent;
import javaio;
import javaxswing;
public class MyNotepad implements ActionListener{
private JFrame frame=new JFrame("新记事本");
private JTextArea jta=new JTextArea();
private String result="";
private boolean flag=true;
private File f;
private JButton jb=new JButton("开始");
private JTextField jtf=new JTextField(15);
private JTextField jt=new JTextField(15);
private JButton jbt=new JButton("替换为");
private JButton jba=new JButton("全部替换");
private Icon ic=new ImageIcon("D:\\java课堂笔记\\GUI\\11gif");
private String value;
private int start=0;
private JFrame jf=new JFrame("查找");
private JFrame jfc=new JFrame("替换");
@Override
public void actionPerformed(ActionEvent e) {
String comm=egetActionCommand();
if("新建"equals(comm)){
if(!(framegetTitle()equals("新记事本"))){
if(!flag){
write();
newNew();
}else{
JFileChooser jfc=new JFileChooser("D:\\java课堂笔记");
int returnVal = jfcshowDialog(null,"保存为");
if(returnVal == JFileChooserAPPROVE_OPTION) {//选择文件后再执行下面的语句,保证了程序的健壮性
f=jfcgetSelectedFile();
flag=false;
write();
}
}
}else if(!(jtagetText()isEmpty())){
JFileChooser jfc=new JFileChooser("D:\\java课堂笔记");
int returnVal = jfcshowDialog(null,"保存为");
if(returnVal == JFileChooserAPPROVE_OPTION) {//选择文件后再执行下面的语句,保证了程序的健壮性
f=jfcgetSelectedFile();
flag=false;
write();
newNew();
}
}else{
newNew();
}
}else if("打开"equals(comm)){
JFileChooser jfc=new JFileChooser("D:\\java课堂笔记");
jfcsetDialogType(JFileChooserOPEN_DIALOG);
int returnVal = jfcshowOpenDialog(null);
if(returnVal == JFileChooserAPPROVE_OPTION) {//选择文件后再执行下面的语句,保证了程序的健壮性
f=jfcgetSelectedFile();
framesetTitle(fgetName());
result=read()();
flag=false;
value=result;
jtasetText(result);
}
}else if("保存"equals(comm)){
JFileChooser jfc=new JFileChooser("D:\\java课堂笔记");
if(flag){
int returnVal = jfcshowDialog(null,"保存为");
if(returnVal == JFileChooserAPPROVE_OPTION) {//选择文件后再执行下面的语句,保证了程序的健壮性
f=jfcgetSelectedFile();
flag=false;
write();
}
}else{
write();
}
}else if("另存"equals(comm)){
JFileChooser jfc=new JFileChooser("D:\\java课堂笔记");
int returnVal = jfcshowDialog(null,"另存");
if(returnVal == JFileChooserAPPROVE_OPTION) {//选择文件后再执行下面的语句,保证了程序的健壮性
f=jfcgetSelectedFile();
write();
}
}else if("退出"equals(comm)){
Systemexit(0);
}else if("撤销"equals(comm)){
jtasetText(value);
}else if("剪切"equals(comm)){
value=jtagetText();
jtacut();
}else if("复制"equals(comm)){
jtacopy();
}else if("粘贴"equals(comm)){
value=jtagetText();
jtapaste();
}else if("删除"equals(comm)){
value=jtagetText();
jtareplaceSelection(null);
}else if("全选"equals(comm)){
jtaselectAll();
}else if("查找"equals(comm)){
value=jtagetText();
jfadd(jtf,BorderLayoutCENTER);
jfadd(jb,BorderLayoutSOUTH);
jfsetLocation(300,300);
jfpack();
jfsetVisible(true);
jfsetDefaultCloseOperation(JFrameDISPOSE_ON_CLOSE);
}else if("替换"equals(comm)){
value=jtagetText();
GridLayout gl=new GridLayout(3,3);
JLabel jl1=new JLabel("查找内容:");
JLabel jl2=new JLabel("替换为:");
jfcsetLayout(gl);
jfcadd(jl1);
jfcadd(jtf);
jfcadd(jb);
jfcadd(jl2);
jfcadd(jt);
jfcadd(jbt);
JLabel jl3=new JLabel();
JLabel jl4=new JLabel();
jfcadd(jl3);
jfcadd(jl4);
jfcadd(jba);
jfcsetLocation(300,300);
jfcpack();
jfcsetVisible(true);
jfcsetDefaultCloseOperation(JFrameDISPOSE_ON_CLOSE);
}else if("版本"equals(comm)){
JDialog jd=new JDialog(frame,"关于对话框");
jdsetSize(200,200);
JLabel l=new JLabel("哈哈哈哈哈哈哈哈哈哈呵呵呵呵呵呵呵呵呵呵呵呵呵");
jdadd(l,BorderLayoutCENTER);
jdsetLocation(100,200);
jdsetSize(300,300);
jdsetVisible(true);
// jdpack();
jdsetDefaultCloseOperation(JDialogDISPOSE_ON_CLOSE);
}else if("开始"equals(comm)||"下一个"equals(comm)){
String temp=jtfgetText();
int s=valueindexOf(temp,start);
if(valueindexOf(temp,start)!=-1){
jtasetSelectionStart(s);
jtasetSelectionEnd(s+templength());
jtasetSelectedTextColor(ColorGREEN);
start=s+1;
jbsetText("下一个");
// value=valuesubstring(s+templength());//不能截取字串
}else {
JOptionPaneshowMessageDialog(jf, "查找完毕!", "提示", 0, ic);
jfdispose();
}
}else if("替换为"equals(comm)){
String temp=jtfgetText();
int s=valueindexOf(temp,start);
if(valueindexOf(temp,start)!=-1){
jtasetSelectionStart(s);
jtasetSelectionEnd(s+templength());
jtasetSelectedTextColor(ColorGREEN);
start=s+1;
jtareplaceSelection(jtgetText());
}else {
JOptionPaneshowMessageDialog(jf, "查找完毕!", "提示", 0, ic);
jfdispose();
}
}else if("全部替换"equals(comm)){
String temp=jtagetText();
temp=tempreplaceAll(jtfgetText(), jtgetText());
jtasetText(temp);
}
}
public String read()(){
String temp="";
try {
FileInputStream fis = new FileInputStream(fgetAbsolutePath());
byte[] b=new byte[1024];
while(true){
int num=fisread()(b);
if(num==-1)break;
temp=temp+new String(b,0,num);
}
fisclose();
} catch (Exception e1) {
e1printStackTrace();
}
return temp;
}
public void write(){
try {
FileOutputStream fos=new FileOutputStream(f);
foswrite(jtagetText()getBytes()());
fosclose();
} catch (Exception e) {
eprintStackTrace();
}
}
public void newNew(){
framedispose();
new MyNotepad();
flag=true;
}
public MyNotepad(){
JMenuBar jmb=new JMenuBar();
String[] menuLab={"文件","编辑","帮助"};
String[][] menuItemLab={{"新建","打开","保存","另存","退出"},
{"撤销","剪切","复制","粘贴","删除","全选","查找","替换"},
{"版本"}};
for(int i=0;i<menuLablength;i++){
JMenu menu=new JMenu(menuLab[i]);
jmbadd(menu);
for(int j=0;j<menuItemLab[i]length;j++){
JMenuItem jmi=new JMenuItem(menuItemLab[i][j]);
menuadd(jmi);
jmiaddActionListener(this);
}
}
framesetJMenuBar(jmb);
jtasetLineWrap(true);//自动换行
JScrollPane jsp=new JScrollPane(jta);//滚动窗口面板
frameadd(jsp);
jbaddActionListener(this);
jbtaddActionListener(this);
jbaaddActionListener(this);
framesetLocation(200,50);
framesetSize(620,660);
framesetVisible(true);
framesetDefaultCloseOperation(JFrameEXIT_ON_CLOSE);
}
public static void main(String[] args) {
new MyNotepad();
}
}
分析:代码有提示信息,而且这是编译期错误,eclipse有提示,运行页可以看出这是传给方法addActionListener方法的实参类型与函数声明里面的默认参数类型不匹配导致的。
原因:ActionListener是一个接口,既然是接口,当然是不能new ActionListener(){}了,然addActionListener参数又是ActionListener类型,这时候这里应该是在传给方法addActionListener方法的时候创建一个匿名内部类传进去,也就是说new ActionListener(){}的大括号里面你要实现接口ActionListener里面的抽象方法。
解决方法:就是在大括号里面实现ActionListener接口的抽象方法就可以了。
import javaawt;
import javaawtevent;
class color {
class MyListener implements ActionListener {
public void actionPerformed(ActionEvent e) {
Frame f=null;
if (egetActionCommand() == "红")
fsetBackground(Colorred);
if (egetActionCommand() == "黄")
fsetBackground(Coloryellow);
if (egetActionCommand() == "蓝")
fsetBackground(Colorblue);
}
}
public static void main(String args[]) {
Frame f = new Frame("背景色");
Button a = new Button("红");
Button b = new Button("黄");
Button c = new Button("蓝");
fadd(a);
fadd(b);
fadd(c);
aaddActionListener(new color()new MyListener());
fsetLayout(new FlowLayout());
fsetSize(300, 300);
fsetVisible(true);
}
}
______________________________________________
上面是我给你修改后的程序
你有三点编程上的误区:
1类名的定义必须是大写的,虽然小写也无可厚非,但这是规矩建议把color改成Color
2内部类的使用还是不清楚必须先定义一个外部类对象,然后再打点创建类部类对象也就是说在new MyListener()前不须要定义一个color类对象
3if里面的变量最好在if外初始化一下这样能避免出错即使你肯定不会出现变量不被初始化的情况,但还是要这样做,这是规矩
_______________________________
持之以恒,才是王道,希望你能在JAVA这条路上走的更远。
以上就是关于修改了一个JAVA程序,但是总是报错,求大神分析。。。全部的内容,包括:修改了一个JAVA程序,但是总是报错,求大神分析。。。、java程序错误修改和记事本程序、JAVA程序问题修改!等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)