java的UI程序 简单 排错

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java的UI程序 简单 排错相关的知识,希望对你有一定的参考价值。

这个是我从eclipse上面考下来的 我运行了没有任何输出结果 那个OK打不出来 怎么办
public class KeyEvent


/**
* @param args
*/
public static void main(String[] args)

// TODO Auto-generated method stub
new KeyFrame().Actual();




import java.awt.Color;
import java.awt.Frame;
import java.awt.event.KeyAdapter;

public class KeyFrame extends Frame

public void Actual()

setLayout(null);
setBounds(300,300,500,500);
setBackground(new Color(38,56,78));

addKeyListener(new MyKeyMonitor());
setVisible(true);

class MyKeyMonitor extends KeyAdapter

public void keyPressed(KeyEvent e)

System.out.println("OK!");




谢谢啊

问题出在KeyEvent上。请注意你的MAIN类的名字叫KeyEvent,而MyKeyMonitor类重写的方法keyPressed的入参的类型也是KeyEvent(这个KeyEvent应该是java.awt.event包下的),也就是说,当你的MAIN类和MyKeyMonitor在同一包内时,当触发keyPressed事件时,JAVA会自动去生成你MAIN类的实体,不会去生成java.awt.event包下的正确的KeyEvent实体,所以,你的程序才不能正确的捕获产生的键盘事件。
解决的方法有两个,一个是改变你MAIN类的名字,二是指明MyKeyMonitor类keyPressed方法入参的明确包,即写成public void keyPressed(java.awt.event.KeyEvent e)
参考技术A /*说实话,你的程序写的有点不合理。改后是按下空格键就打印出 ok!具体情况看注释吧!我把这两个类写一个文件中了。*/
import java.awt.Color;
import java.awt.Frame;
import java.awt.event.KeyAdapter;
/*这个类名取的也不好,跟java.awt.event.KeyEvent中的KeyEvent重名了,导致以后的麻烦。*/
public class KeyEvent
public static void main(String[] args)
new KeyFrame().Actual();



class KeyFrame extends Frame
public void Actual()
setLayout(null);
setBounds(300, 300, 500, 500);
setBackground(new Color(38, 56, 78));

addKeyListener(new MyKeyMonitor());
setVisible(true);

/*这个类继承了KeyAdapter但是你没有重写KeyAdapter的任何一个方法,
所以按下任何键都没有效果,我帮你重写了KeyAdapter的一个方法。建议你看一下帮助文档。*/
class MyKeyMonitor extends KeyAdapter
@Override
public void keyPressed(java.awt.event.KeyEvent e)
/*当按下空格键时,打印这句话,KeyEvent.VK_SPACE就不解释了。看一下帮助文档就ok了!*/
if(e.getKeyCode() == java.awt.event.KeyEvent.VK_SPACE)
System.out.println("ok!");



Java程序排错定位

目录

一、错误的分类

1、有报错的错误

2、没报错的错误

二、错误的定位

1、检查有没有报错信息

2、检查标准输出文件和异常输出文件有没有报错信息

3看代码


一、错误的分类

程序运行出错指的是程序未按照程序预设的逻辑执行,从而造成非预期的结果,具体表现就是报错中断或数据错误。作为程序员,一定要分清哪口锅是自己的,对于设计中的预设错误一定要甩出去,例如:传入参数不合法、违反业务规则等等。本节,我们只考虑自己的锅。自己这口锅里能装的错误也很多,但是我们不考虑纯粹的认为因素造成的运行出错(例如版本遗漏、配置错误等等)。

1、有报错的错误

造成这一类错误的原因,主要有:

A. 开发过程不严谨,没有进行必要的判断或没有充分的考虑各种可能的分支(这就是为毛好些java规范里要求if和else要成对出现的原因),这类错误里最为常见的异常就是空指针、下标越界、除数为0等运行时异常了;

B. 内存泄露问题。java对指针进行的透明化处理,GC操作大多数时间也由JVM自主完成,但是毕竟内存中的数据是程序在运行过程中塞进去的,如果数据的生命周期设计存在问题的话,很容易会造成OOM错误。前段时间和一个朋友就聊到了这个问题,他所在公司的一个项目就是因为未及时释放有效数据导致jvm内存占用持续增高,即使JVM执行FullGC操作后,内存占用率依旧很高,从而导致OOM错误。

C. 捕获的范围小了,预期外的错误未捕获。在一个项目中就遇到过这种情况,程序只对Exception进行了捕获,未捕获Error,导致程序在抛出了一个Error(那次是一次人为的原因)而导致未回滚数据库事务,造成了锁表。

2、没报错的错误

造成这一类错误的原因,主要有:

A. 虽然抛出了错误,但是被吃掉了。就是在catch到Exception后没有进行任何处理,包括打印日志。这个的原因就不多说了...说多了都是泪。

B. 程序正常执行完成,但是结果不符合预期。这个原因很可能是程序未对并发安全进行设计。

C. 无限等待,超时时间设置不合理或者死锁。

二、错误的定位

定位错误是有一个大概的顺序的。

1、检查有没有报错信息

日志文件中登记的错误,这个算是最简单的,在定位错误时,也最希望问题在这一步得到确认。在打印异常时,通常会打印异常的调用栈信息,通过调用栈信息就可以很便捷的定位问题了。

2、检查标准输出文件和异常输出文件有没有报错信息

Error可能不会打印在日志文件中(如果关掉了标准输出就不会打印了),但是会打印在标准输出中,前提是没有把标准输出也吃掉。通常在出现错误时,单单通过检查日志来定位问题怕是不足以说明问题,通常还会配合dump文件进行分析,因此在程序启动时需要开启相应参数(-XX:+HeapDumpOnOutOfMemoryError),在JVM出现内存溢出异常时Dump出当前的内存堆转储快照以便后续进行分析。

3、看代码

以上是关于java的UI程序 简单 排错的主要内容,如果未能解决你的问题,请参考以下文章

java初学,请排错,谢谢

Java程序排错定位

Java程序排错定位

Java代码排错

如何利用 JConsole观察分析Java程序的运行,进行排错调优

java线上程序排错经验2 - 线程堆栈分析