根据进程名来查询父进程的PID

1
wmic process where Name="进程名.exe" get ParentProcessId

根据进程的PID来查询父进程的PID

1
wmic process where ProcessId=PID get ParentProcessId

前言

最近写了个Swing的工具程序,点击按钮时,按钮没有释放焦点。

这样下次切换到该程序时,容易误触发到上次点击的按钮。

jb.setFocusPainted(false);

调用JButton的setFocusPainted方法,并传入false作为参数即可释放该按钮的焦点。

1
2
3
JButton jb;
//去焦点
jb.setFocusPainted(false);
阅读全文 »

python截取字符串子串

在python中没有类似sub()或者类似Java的subString()的方法来截取字符串。

不过在Python中字符串的截取操作更加简单,可以用string[indexA:indexB]来截取字符串

阅读全文 »

python中如何退出多层循环

1、定义标记变量;利用变量值的变化退出循环
2、利用else continue和外层的break跳出循环
3、使用函数配合return关键字 实现跳出循环(在函数内部只要执行完return语句 则直接退出函数)

阅读全文 »

Java Swing 如何判断JSplitPane左侧面板是否折叠 如何判断右侧面板是否折叠

相同问题:

  • 如何判断JSplitPane顶部面板是否折叠 如何判断底部面板是否折叠
  • 如何判断JSplitPane面板1是否折叠 如何判断面板2是否折叠

监听PropertyChangeEvent

可以通过判断分割条的位置来判断左右侧面板是否被折叠:

  • 当分隔条的位置为0的时候,左侧面板被折叠
  • 但是由于窗体可大可小,折叠右侧面板时,分隔条的位置是不固定的。
    • 如果窗体大小时固定的话,我们可以尝试折叠右侧面板,记下此时分隔条的位置Xxx。
      • 当下次分隔条的位置为Xxx时,就说明右侧面板被折叠。
    • 不过我发现jSplitPane.getMaximumDividerLocation()jSplitPane.getMinimumDividerLocation()相加起来的结果,就是折叠右侧面板时分隔条的坐标值。
阅读全文 »

使用JPopupMenu实现系统托盘中文弹出菜单

TrayIcon构造函数

方法 描述
TrayIcon(Image image) Creates a TrayIcon with the specified image.
TrayIcon(Image image, String tooltip) Creates a TrayIcon with the specified image and tooltip text.
TrayIcon(Image image, String tooltip, PopupMenu popup) Creates a TrayIcon with the specified image, tooltip and popup menu.

可以看到,我们可以使用PopupMenu作为系统托盘程序的弹出菜单。

PopupMenu不支持中文

但是PopupMenu有如下问题:

  • PopupMenu添加的菜单项MenuItem不支持图标,是awt级组件,没有提供paint函数,也就意味着不能重绘,去实现带图标的菜单;
  • PopupMenu只支持英文,中文会乱码,如果确实需要支持中文的话,运行的jar时候,需要使用加上-Dfile.encoding=GBK参数,指定以GBK编码来运行,一般来说我们要处理的文件也通常是UTF-8编码的,如果使用这个GBK编码运行的jar来处理此文件,就会出现乱码问题。

基于JPopupMenu的解决方案

JPopupMenu是Swing组件,而且支持图标+文本,更美观。在标准API里,添加JPopupMenu的有两种方式:
1、Component组件调用setComponentPopuMenu(JPopupMenu)方法来绑定JPopupMenu;
2、JPopupMneu调用show(Component c,int x,int y)方法绑定至组件的(x,y)坐标上;

但问题是,TrayIcon不是Component,不能通过上述两种方法进行绑定。

弹出菜单的触发过程

在 鼠标点击或者按下快捷键 时 生成弹出菜单。

所以我们可以在点击系统托盘的时候,单独创建一个Component作为JPopupMenu的参考坐标。

这个Component,我们可选择Java现成的JWindow或者JDialog等等。经过测试JDialog来实现会更好一些。

JPopupMenu实现系统托盘弹出菜单的步骤

获取鼠标点击的坐标值,在这个坐标值上创建一个JDialog,然后将JPopupMenu绑定到这个JDialog的(0,0)位置上,弹出菜单显示后再获取弹出菜单的尺寸,再根据尺寸回调JDialog的大小,这样JPopupMenu就完美的遮罩了JDialog,看不出JDialog的存在。
不过这样做,还有最后一个问题,那就是在弹出菜单消失后,JDialog依然存在;

这倒不用担心,JPopupMenu提供了:firePopupMenuCanceled()、firePopupMenuWillBecomeInvisible()、firePopupMenuWillBecomeVisible(),菜单消失、消失前、消失后,这三个回调函数。

所以,我们可以选择重写其中任意一个函数,在JPopupMenu消失之前关闭JPopupMenu的载体即可。

这样就可以完美实现系统托盘弹出菜单啦。

阅读全文 »

  • InetAddress表示IP地址的操作类,可以通过此类指定要连接的主机名称。
  • 在开发中如果要取得一个网络资源可以使用URL类进行定位,只有使用IO流的方式进行读取。
  • 使用URLEcoder可以为信息编码,使用URLDecoder可以为编码的内容进行解码
  • ServerSocket主要用在TCP协议的服务器程序开发上,使用accept()方法等待客户端连接,每一个连接的客户端都使用一个Socket表示。
  • 服务器端加入多线程机制之后,就可以同时多个用户提供服务。
  • UDP属于不可靠的连接协议,采用数据报的形式,对于服务器发送的信息,客户端不一定能收到。

批处理 延迟变量SetLocal EnableDelayedExpansion

在cmd执行命令前会对脚本进行预处理,其中有一个过程是变量识别过程,在这个过程中,如果有两个%括起来的如%value%类似这样的变量,就会对其进行识别,并且查找这个变量对应的值,再而将值替换掉这个变量,这个替换值的过程,就叫做变量扩展,然后再执行命令。

示例0

D:\Desktop\test\CMD\延迟变量\test0.bat
1
2
set value=kkkkkkk 
echo %value%

将这段代码保存到test0.bat文件中。然后打开cmd,进到对应目录下,执行这个文件。

运行结果:

1
2
3
4
5
6
7
D:\Desktop\test\CMD\延迟变量>test0.bat

D:\Desktop\test\CMD\延迟变量>set value=kkkkkkk

D:\Desktop\test\CMD\延迟变量>echo kkkkkkk
kkkkkkk

最后一行是结果,但是在结果之前,还有两句,set value=kkkkkkk 和 echo kkkkkkk。
但是在test0.bat中,我们并没有写echo kkkkkkk这样的语句,这表明至少在执行到echo %value% 这句时,cmd已经把 变量value 替换成 kkkkkkk这个值。

这就是变量的扩展

那么什么是变量的延迟扩展呢?

变量延迟两要素

  • 变量延迟的启动语句是“SetLocal EnableDelayedExpansion”,
  • 并且变量要用一对英文感叹号“!!”括起来
阅读全文 »