关于java的监听器
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于java的监听器相关的知识,希望对你有一定的参考价值。
f.addWindowListener(new WindowAdapter()
public void windowClosing(WindowEvent e)
System.exit(0);
);
请帮我解释一下这段具体是什么意思,我知道里面是个匿名类,但是里面这个匿名类返回的是什么,这个返回值作为f.addWindowListener( );这个括号里面的参数?
如果可以的话麻烦推荐一下java awt和swing怎么去学,看《java实用教程》(第2版)感觉挺悬乎的,解释太少
1、public void addWindowListener(WindowListener l)添加指定的窗口侦听器,以从此窗口接收窗口事件。如果 l 为 null,则不抛出任何异常,且不执行任何操作。
这个是API中的方法定义,此方法参数为接口WindowListener,任何实现该接口的类都可以作为参数。
2、public abstract class WindowAdapter implements WindowListener, WindowStateListener, WindowFocusListener
接收窗口事件的抽象适配器类。此类中的方法为空。此类存在的目的是方便创建侦听器对象。
扩展此类可创建 WindowEvent 侦听器并为所需事件重写该方法。(如果要实现
WindowListener 接口,则必须定义该接口内的所有方法。此抽象类将所有方法都定义为
null,所以只需针对关心的事件定义方法。)
使用扩展的类可以创建侦听器对象,然后使用窗口的 addWindowListener
方法向该窗口注册侦听器。当通过打开、关闭、激活或停用、图标化或取消图标化而改变了窗口状态时,将调用该侦听器对象中的相关方法,并将
WindowEvent 传递给该方法。
3、如果我想在代码中一次性使用某个类(抽象类或具体类)或接口,可以使用匿名类的方式,这样不需自己定义一个My***类,然后再使用,比较方便。用法就是直接在new WindowAdapter()后面加入类定义,在其中实现或覆盖方法就可以了。
匿名类不是返回值,而是相当于new String(“hello”)这种的扩展形式。我觉得匿名类的最多用处就是加监听器时。
附上WindowAdapter源代码:
public abstract class WindowAdapterimplements WindowListener, WindowStateListener, WindowFocusListener
public void windowOpened(WindowEvent e)
public void windowClosing(WindowEvent e)
public void windowClosed(WindowEvent e)
public void windowIconified(WindowEvent e)
public void windowDeiconified(WindowEvent e)
public void windowActivated(WindowEvent e)
public void windowDeactivated(WindowEvent e)
public void windowStateChanged(WindowEvent e)
public void windowGainedFocus(WindowEvent e)
public void windowLostFocus(WindowEvent e)
参考技术A 根据猜测f应该算是一个swing的组件,此段代码的意思是给f组件绑定窗口适配器,然后通过匿名内部类的方式监听窗口关闭事件,以响应用户的操作。 参考技术B 意思是当你关闭窗口的时候,即windowClosing时,退出程序,System.exit(0);
Java任务控制监听器?
【中文标题】Java任务控制监听器?【英文标题】:Java Mission Control Listener? 【发布时间】:2017-07-17 01:32:30 【问题描述】:我目前有一些想要分析的 Java 代码。在阅读了一些关于它的有希望的内容后,我决定使用 Java Mission Control。但是,到目前为止,我咨询过的每个资源都告诉我首先启动我想要分析的进程,然后才在任务控制已经运行后“附加”或分析代码(例如来自 oracle 的这个视频:@ 987654321@)。
有没有办法从一开始就进行分析?谢谢
【问题讨论】:
【参考方案1】:有一种方法可以在您开始该过程时开始分析记录。
示例:运行分析记录 10 分钟。
java -XX:+UnlockDiagnosticVMOptions -XX:+DebugNonSafepoints -XX:+UnlockCommercialFeatures -XX:+FlightRecorder -XX:StartFlightRecording=duration=10m,name=Test,filename=recording.jfr,settings=profile -jar target/highcpu-0.0.1.jar
更多详情请看我的文章:Using Java Flight Recorder
【讨论】:
【参考方案2】:没有很好的记录,但有可能。 你需要使用这个 jvm 选项
-XX:+UnlockCommercialFeatures -XX:+FlightRecorder -XX:FlightRecorderOptions=
前两个是强制性的,而最后一个需要配置各种参数,您可以在here 找到解释。 理解每个参数的含义并不简单,但通过一些试验和错误,您可以很容易地找到一组好的选项。
作为参考,这是一个最小的功能配置:
java -XX:+UnlockCommercialFeatures -XX:+FlightRecorder -XX:FlightRecorderOptions=defaultrecording=true,disk=true,repository=/tmp,maxage=6h,settings=default MyApp
【讨论】:
【参考方案3】:JDK 11:
-XX:StartFlightRecording
JDK 9、JDK 10:
-XX:+UnlockCommercialFeatures
-XX:StartFlightRecording
JDK 8u40,
-XX:+UnlockCommercialFeatures
-XX:StartFlightRecording=name=whatever
JDK 7u4、JDK 8u20:
-XX:+UnlockCommercialFeatures
-XX:+FlightRecorder
-XX:StartFlightRecording=name=whatever
如果您想避免一起附加到进程,您可以指定一个文件名,即 -XX:StartFlightRecording=filename=rec.jfr,然后通过设置持续时间(即 duration=)在一段时间后转储记录60s,或者如果你只希望它在 JVM 退出时发生:
-XX:StartFlightRecording=
filename=rec.jfr,dumponexit=true
您可以在 JMC 中打开然后打开录制文件。在 JDK 11 中,这已被进一步简化,因此您只需指定:
-XX:StartFlightRecording:filename=c:\recs
并且文件名会在指定目录下生成,JVM退出时会自动转储。
【讨论】:
以上是关于关于java的监听器的主要内容,如果未能解决你的问题,请参考以下文章
关于java AudioInputStream播放短音频没声音的问题