Java程序开发学习之组件及事件处理

2023-10-27

(学习参考书:Java2实用教程第5版)

一、GUI编程

容器类(Container)和组件类(Component)。javax.swing包中JComponent类是java.awt包中Container类的一个直接子类,java.awt包中Component类的一个间接子类。GUI编程的基本知识点:

  • Java把Component类的子类或间接子类创建的对象称为一个组件
  • Java把Container的子类或间接子类创建的对象称为一个容器
  • 可以向容器添加组件。Container类提供了一个public方法add(),一个容器可以调用这个方法将组件添加到该容器中。
  • 容器调用removeAll()方法可以移除容器中的全部组件,调用remove (Component c)方法可以移除参数c指定的组件。
  • 容器本身也是一个组件,因此可以把一个容器添加到另一个容器中实现容器的嵌套。
  • 每当把容器添加新的组件或移除组件时,应当让容器调用validate()方法,以保证容器中的组件能正确显示出来。

二、窗口

基于GUI的应用程序能够提供一个能和操作系统直接交互的容器,该容器可以被直接显示,绘制在操作系统所控制的平台上(显示器),这样的容器被称为GUI设计中的底层容器。Java提供的JFrame类创建的对象就是一个底层容器,俗称窗口。(JDialog类创建的对象也是一个底层容器,俗称对话框。)当需要一个窗口时,可以使用JFrame或其子类创建一个对象。
(1)JFrame常用方法:

	JFrame()创建一个无标题的窗口
	
	JFrame(String s)创建标题为s的窗口
	
	public void setBounds(int a,int b,int width,int height)设置窗口的初始位置为(a,b),即距屏幕左边a个像素,距屏幕上方b个像素,窗口的宽是width,高是height
	
	public void setSize(int width,int height)设置窗口的大小宽是width,高是height
	
	public void setLocation(int x,int y)设置窗口的位置,默认位置是(00public void setVisible(boolean b)设置窗口是否可见,窗口默认不可见
	
	public void setResizable(boolean b)设置窗口是否可调整大小,默认可调整大小
	
	public void dispose()撤销当前窗口,并释放当前窗口所使用的资源
	
	public void setExtendedState(int state)设置窗口的扩展状态,其中参数state取JFrame类中的·	下列类常量:
	MAXIMIZED_HORIZ 水平方向最大化
	MAXIMIZED_VERT 垂直方法最大化
	MAXIMIZED_BOTH 水平垂直方向都最大化
	
	public void setDefaultCloseOperation(int operation)设置单击窗体右上角关闭图标后,程序会做出怎样的处理。其中参数operation取JFrame类中int static常量:
	DO_NOTHING_ON_CLOSE 什么也不做
	HIDE_ON_CLOSE 隐藏当前窗口
	DISPOSE_ON_CLOSE 隐藏当前窗口,并释放窗体占有的其他资源
	EXIT_ON_CLOSE 结束窗口所在的应用程序

(2)菜单条、菜单、菜单项
这三者是窗口常用的组件,菜单放在菜单条里,菜单项放在菜单里

  1. 菜单条:JComponent类的子类JMenubar负责创建菜单条,即JMenubar创建的一个对象就是一个菜单条。JFrame有一个将菜单条放置到菜单的方法:
    setJMenuBar(JMenuBar bar) 该方法将菜单条添加到窗口的最顶端,只能向窗口添加一个菜单条
  2. 菜单:JComponent类的子类JMenu负责创建菜单,即JMenu创建的一个对象就是一个菜单
  3. 菜单项:JComponent类的子类JMenuItem负责创建菜单项,即JMenuItem创建的一个对象就是一个菜单项
  4. 嵌入子菜单:JMenu是JMeunItem的子类,因此菜单本身也是一个菜单项,当把一个菜单看作菜单项添加到某个菜单时,称被添加的菜单为子菜单
  5. 菜单上的图标:为了使菜单项有一个图标,可以使用图标类Icon声明一个图标,然后使用其子类ImageIcon类创建一个图标。然后菜单项调用setIcon(Icon
    icon)方法将图标设置为参数icon

三、常用组件与布局

(1)常用组件:都是JComponent的子类

JTextField 文本框,允许用户在文本框输入单行文本

JTextArea 文本区,允许用户在文本区输入多行文本

JButton 按钮,允许用户单击按钮

JLabel 标签,标签为用户提供提示信息

JCheckBox 复选框,为用户提供多项选择,并提供两种状态,一种是选中,一种是未选中,用户通过单击该组件切换状态

JRadioButton 单选按钮,为用户提供单项选择

JComboBox 下拉列表,为用户提供可单项选择的列表

JPasswordField 密码框,允许用户在框内输入单行密码,密码的默认回显字符是*。可以使用setEchoChar(char c)重新设置回显字符,调用char[] getPassword()方法返回用户在密码框中输入的密码。

(2)常用容器:JComponent专门提供了一些经常用来添加组件的容器,相对于JFrame底层容器,这些容器常被称为中间容器。中间容器必须被添加到底层容器才能发挥作用。

JPanel 面板,创建有个面板后,再向其中添加组件,然后把这个面板添加到其他容器中。JPanel面板的默认布局是FlowLayout布局

JTabbedPane 选项卡窗口,当用户向其中添加一个组件时,选项卡窗口自动为该组件指定一个对应的选项卡,即让一个选项卡对应一个组件。各个选项卡对应 的组件层叠式放入该容器中,当用户单击选项卡时,容器会显示选项卡对应的组件。选项卡默认在该容器的顶部,从左向右依次排列。使用add(String text,Component c);方法将组件c添加到选项卡容器中去,并且对应文本提示是text。

JScrollPane 滚动窗格,只可以添加一个组件,可以把组件放到一个滚动窗格中,然后通过滚动条来观看该组件比如JTextArea不自带滚动条,因此把文本区放到滚动窗口中:JScrollPane scroll = new JScrollPane(JTextArea);

JSplitPane 拆分窗格,是被分成两部分的容器。具有水平拆分和垂直拆分。水平拆分窗口就是左右各一组件,中间用可以水平移动的拆分线隔。垂直拆分同理。
两个常用构造方法:
JSplitPane(int a,Component b,Component c);参数a取该类的静态常量HORIZONTAL_SPLIT或VERTICAL_SPLIT,决定是水平还是垂直
JSplitPane(int a,boolean b,Component c,Component d);参数a同上决定方向,参数b决定当拆分线移动时,组件是否连续变化(true是连续)

JLayeredPane 分层窗格,如果添加到容器的组件经常需要处理重叠问题,就可以考虑将组件添加到分层窗格中。分层窗格分为5层,使用add(Jcomponentcom,int layer)添加组件com,并指定com所在的层。layer的取值是该类中的类常量:DEFAULT_LAYER(最底层),PALETTE_LAYER, MODAL_LAYER,POPUP_LAYER,DRAG_LAYER(最上层)。
如果分层窗口添加了多个组件,当用户用鼠标移动一组件时,可以把该组件放到最上层。添加到同一层的组件,如果发生重叠,后添加的会遮挡先添加的组件。分层窗格调用public void setLayer(Component c,int layer)可以重新设置组件c所在的层,调用public int getLayer(Component c)可以获取c所在的层数。

(3)常用布局:布局可以控制组件在容器中的位置。设置布局的方法:setLayout(布局对象);

FlowLayout 常用构造方法FlowLayout();可以创建一个居中对齐的布局对象使用add方法将组件顺序添加到容器中,组件按照先后顺序从左到右排列,一行排满后就转到下一行继续从左到右排列。组件的大小默认为最佳大小,如需调整需调用public void setPreferredSize(new Dimension(int x,int y))。调用setAlignment(int align)方法可以重新设置布局的对齐方式,其中参数align取值FlowLayout.LEFT、FlowLayout.CENTER、FlowLayout.RUGHT。

BorderLayout 使用这种布局的容器将空间简单分为东西南北中5个区域,每一个添加的组件应该指明添加到哪个区域中。区域由静态常量表示:CENTER、NORTH、SOUTH、WEST、EAST例:将组件b添加到使用该布局的容器con中:con.add(b,BorderLayout.CENTER);

CardLayout  使用该布局的容器可以容纳多个组件,这些组件被层叠放入容器中,最先加入的容器是第一张(最上面),依次向下排列。该布局的特点是:同一时刻容器只能从这些组件中选一个出来显示。假设有一个容器con,使用步骤如下:
(1)创建CardLayout对象作为布局:CardLayout card = new CardLayout();
(2)为容器设置布局:con.setLayout(card)
(3)容器调用add(String s,Component b)将组件b加入容器,给出代号s(不是组件的名字)
(4)用代号显示组件:card.show(con,s);也可按顺序显示

GridLayout  使用较多的布局编辑器,把容器划分为若干行乘若干行的网格区域。组件位于每一个小格中,调用方法add(Component c)将组件c加入容器

null 空布局可以准确定位组件在容器内的大小和位置。setBounds(int a,int b,int width,int height)方法是所有组件都拥有的一个方法。使用方法:
(1)设置容器p为空布局:p.setLayout(null)
(2)添加组件:p.add(Component c)
(3)设置大小和位置:c.setBounds(int a,int b,int width,int height)

BoxLayout 盒式容器,可以利用容器的嵌套,将某个容器嵌入几个盒式容器,达到布局目的。使用静态方法createHorizontaBox()获得一个行型盒式容器,createVerticalBox获得一个列型盒式容器。使用水平支撑和垂直支撑控制布局容器和组件之间的距离。createHorizontalStrut(int width)得到一个不可见的水平支撑,宽度为width;createVerticalStrut(int height)得到一个不可见的垂直支撑,高度为height。

四、处理事件

程序对用户在界面上进行的操作作出反应,来实现特定的任务叫处理事件。
(1)事件处理模式
事件源:能够产生事件的对象都可以称为事件源,如文本框、按钮、下拉式列表等。事件源必须是一个对象,而且这个对象必须是Java认为能够发生事件的对象。
监视器:需要一个对象对事件源进行监视,以便对发生的事件做出处理。事件源通过调用相应的方法将某个对象注册为自己的监视器。用户相应的操作就会导致相应事件的发生,并通知监视器做出相应的处理。
处理事件的接口:监视器是一个对象,为了处理事件源发生的事件,监视器会自动调用一个方法。Java规定:为了让监视器能够对事件源发生的事件进行处理,创建该监视器的类必须实现相应的接口,监视器在事件发生时就调用类重写的接口方法。

(2)ActionEvent事件
ActionEvent事件源:文本框、按钮、菜单项、密码框和单选按钮都可以触发ActionEvent事件,即都可以成为ActionEvent事件的事件源。
注册监视器:Java规定能触发ActionEvent事件的组件使用方法addAction Listener(ActionListener listen)(该参数的类型是接口)将实现ActionListener接口的类的实例注册为事件源的监视器。
ActionListener接口:事件源触发ActionEvent事件后,监视器调用action Performed(ActionEvent e)对发生的事件做出处理。
ActionEvent类中的方法:有两种常用方法:

1public Object getSource() 该方法被ActionEvent事件对象调用后可以获取ActionEvent事件的事件源对象的引用,即getSource()方法可以将事件源上转型为Object对象,并返回这个上转型对象的引用。
(2public String getActionCommand() ActionEvent对象调用该方法可以获取发生ActionEvent事件时,和该事件相关的一个命令。

(3)ItemEvent事件
ItemEvent事件源:选择框、下拉列表可以触发ItemEvent事件。选择框选择状态的改变和下拉列表每一项的确认选择,就可以触发该事件。
注册监视器:能触发该事件的组件使用addItemListener(ItemListener listen)将实现ItemListener接口的类的实例注册为事件源的监视器。
ItemLisenter接口:事件源触发该事件后,监视器会调用该接口中唯一的方法public void itemStateChanged(ItemEvent e)对事件进行处理。

(4)DocumentEvent事件
Document事件源:文本区含有一个实现Document接口的实例,该实例被称为文本去所维护的文档。该文档能触发DocumentEvent事件,文本区调用get Document方法返回所维护的文档。
注册监视器:能触发该事件的事件源使用addDocumentListener(DocumentLis tener listen)将实现DocumentListener接口的类的实例注册为事件源的监视器。
DocumentListener接口:该接口有三个方法:

public void changedUpdate(DocumentEvent e) //变化更新
public void removeUpdate(DocumentEvent e) //删除更新
public void insertUpdate(DocumentEvent e) //输入更新	

事件源触发该文件事件后,监视器将调用接口中的相应方法对事件作出处理。

(5)MouseEvent事件
任何组件都可以发生触发鼠标事件。所以MouseEvent类自动创建一个事件对象。事件源监视器的方法是addMouseListener(MouseListener listener)
使用MouseListener接口处理鼠标事件:该接口可以处理按下、释放、单击、进入、退出5种触发事件源的鼠标操作。
MouseEvent类的重要方法:

getX() 获取鼠标指针在事件源坐标系中的x坐标
getY() 获取鼠标指针在事件源坐标系中的y坐标
getModifiers() 获取鼠标的左键或右键。分别用InputEvent类中的常量BUTTON1_MASK和BUTTON3_MASK表示
getClickCount() 获取鼠标被单击的次数
getSource() 获取发生鼠标事件的事件源
MouseListener的重要方法:
mousePressed(MouseEvent e) 处理在组件上按下鼠标触发的鼠标事件
mouseReleased(MouseEvent e) 处理在组件上释放鼠标键触发的鼠标操作
mouseEntered(MouseEvent e) 处理鼠标进入组件触发的鼠标事件
mouseExited(MouseEvent e) 处理鼠标离开组件触发的鼠标事件
mouseClicked(MouseEvent e) 处理在组件上单击鼠标键触发的鼠标事件

MouseListener的重要方法:

mousePressed(MouseEvent e) 处理在组件上按下鼠标触发的鼠标事件
mouseReleased(MouseEvent e) 处理在组件上释放鼠标键触发的鼠标操作
mouseEntered(MouseEvent e) 处理鼠标进入组件触发的鼠标事件
mouseExited(MouseEvent e) 处理鼠标离开组件触发的鼠标事件
mouseClicked(MouseEvent e) 处理在组件上单击鼠标键触发的鼠标事件

使用MouseMotionListener接口处理鼠标事件:该接口处理在事件源上拖动和移动鼠标触发的操作。常用的方法为:

addMouseMotionListener(MouseMotionListener listener) 注册监视器 
mouseDragged(MouseEvent e) 处理拖动鼠标触发的事件
mouseMoved(MouseEvent e) 处理鼠标移动触发的事件

(6)焦点事件
组件可以触发焦点事件。组件可以使用addFocusListener(FocusListener listener)注册为焦点事件监视器。当组件获得焦点监视器后,如果组件有无输入焦点的变化都会触发FocusEvent事件。创建监视器的类必须要实现FocusListener接口,该接口有两个方法:

public void focusGained(FocusEvent e) 组件从无输入焦点变为有输入焦点时,监视器调用该方法
public void focusLost(FocusEvent e) 组件从有输入焦点变为无输入焦点时,监视器调用该方法

用户通过单击某组件使其获得焦点,同时其他组件也将失去焦点。一个组件可调用public boolean requestFocusInWindow()方法获得输入焦点

(7)键盘事件
按下、释放、敲击键盘上的一个键就触发了键盘事件。使用KeyListener接口处理键盘事件。可以使用addKeyListener(KeyListener e)注册监视器,该接口有如下三个方法:

public void keyPressed(KeyEvent e) 处理按下键盘触发的键盘事件
public void keyTyped(KeyEvent e) 处理敲击(按下又释放)触发的事件
public void keyReleased(KeyEvent e) 处理释放键盘触发的键盘事件

用KeyEvent类的public int getKeyCode()【返回键码值】或者public char getKeyChar()【返回键上字符】方法,可以判断哪个键被按下、敲击和释放

(8)窗口事件
JFrame是Window的子类,fanshiWindow子类创建的对象都可以发生Window Event事件。
WindowListener接口:当一个窗口被打开、关闭、图标化…就触发了窗口事件,即WindowEvent创建了一个窗口事件对象。调用getWindow()方法可以获取发生窗口事件的窗口。窗口使用addWindowlistener方法获得监视器,创建监视器的对象的类必须实现WindowListener接口,该接口有7个方法:

public void windowActivated(WindowEvent e) 窗口从激活到未激活状态调用该方法。
public void windowDeactivated(WindowEvent e)窗口从激活状态到未激活状态调用该方法。
public void windowClosing(WindowEvent e) 当窗口正在关闭时,调用该方法。
public void windowClosed(WindowEvent e) 当窗口关闭后,调用该方法。
public void windowIconified(WindowEvent e) 当窗口图标化后,调用该方法。
public void windowDeiconified(WindowEvent e) 当窗口撤销图标化后,调用该方法。
public void windowOpened(WindowEvent e) 当窗口打开时,调用该方法。
在调用图标化时,会同时调用撤销激活方法;在撤销图标化时,会同时调用激活方法。关闭窗口时,监视器首先调用正在关闭方法再调用关闭后方法。

WindowAdapter适配器:当Java提供处理事件的接口多于一个方法时,Java相应的提供一个适配器类。适配器已经实现了相应的接口,因此可以直接使用适配器类的子类创建的对象作为监视器,在子类中重写需要的方法即可。

(9)匿名类实例或窗口做监视器
匿名类的实例做监视器:如果内部类的实例做监视器,那么事件发生时,监视器比较容易操作事件源所在的外嵌类中的成员,就不必将对象的引用传递给监视器。
窗口做监视器:如果让组件所在的窗口作为监视器,监视器可以方便的操作窗口中的其他成员。

五、对话框

JDialog类和JFrame类都是Window的子类,二者的实例都是底层容器。对话框分为无模式和有模式两种。有模式的对话框处于激活状态时,不能激活该对话框所在程序的其他窗口。无模式的则无此限制。(通常在进行一个重要的操作前,弹出一个有模式的对话框表明操作的重要性)
(1)消息对话框
该对话框是有模式对话框,进行一个重要操作前,最好弹出一个消息对话框。使用JOptionPane类的静态方法创建一个消息对话框:public static void showMessageDialog (Component parentComponent,String message,String title,int messageType)
第一个参数指定对话框可见时的位置,第二个参数指定对话框显示的信息,第三个参数指定标题,第四个参数取值是JOptionPane类中的类常量,用于给出对话框的外观:INFORMATION_MESSAGE、WARNING_MESSAGE、ERROR_MESSAGE、QUESTION_MESSAGE、PLAIN_MESSAGE

(2)输入对话框
该对话框含有供用户输入文本的文本框、确认和取消按钮,是有模式对话框。要求输入一个字符串。用JOptionPane类的静态方法创建一个输入对话框:public static String showInputDialog(Component parentComponent,Object message,String title,int message)
第一个参数指定输入对话框所依赖的组件,第四个组件指定外观,常量的取值同上。

(3)确认对话框
该对话框为有模式对话框,JOptionPane类的静态方法创建一个确认对话框:public static int showConfirmDialog(Component parentComponent,Object message,String title,int optionType)
第一个参数指定对话框出现的位置,第四个参数可取类常量指定外观:YES_NO_OPTION、YES_NO_CANCEL_OPTION、OK_CANCEL_OPTION
该方法会返回下列整数值之一:JOptionPane.YES_OPTION、JOptionPane.NO_OPTION、JOptionPane.CANCEL_OPTION、JOptionPane.OK_OPTION、JOptionPane.CLOSED_OPTION

(4)颜色对话框
JOptionPane类的静态方法创建一个颜色对话框:public static Color showDialog(Component component,String title,Color initialColor)
第三个参数指定颜色对话框返回的初始颜色

(5)自定义对话框
通过建立JDialog的子类来建立一个对话框类,该类的一个实例就是一个对话框。对话框是一个容器,默认布局为BorderLayout。对话框的两个常用构造方法:

JDialog() 构造一个无标题的初始不可见的对话框
JDialog(JFrame owner) 构造一个无标题的初始不可见的无模式的对话框,owner是对话框所依赖的窗口。

六、树组件与表格组件

(1)树组件:JTree类的对象被称为树组件
DefaultMutableTreeNode结点:想构造一个树组件,必须事先为其创建结点对象。任何实现MutableTreeNode接口的类创建的对象都可以成为树上的结点。树中只有一个根节点,所有其他结点从这里引出。其他节点分为带子结点的分支结点和不带子结点的叶结点,每个结点有自己的文本标签和图像图标。Default MutableTreeNode类创建树上的结点,该类常用的构造方法为:

DefaultMutableTreeNode(Object userObject)
DefaultMutableTreeNode(Object userObject,boolean allowChildren) 

树上的TreeSelectionEvent事件:树组件可以触发TreeSelectionEvent事件,树使用addTreeSelectionListener(TreeSelectionListener listener)方法获得一个监视器。鼠标单击结点时,监视器将自动调用接口中的方法

(2)表格组件:
JTable常用的三个构造方法:

JTable() 创建默认的表格模型
JTable(int a,int b) 创建a行,b列的默认模型表格
JTable(Object data[][],Object columnName[]) 创建默认表格模型,并且显示由data指定的二维数组的值,其列名由columnName指定
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java程序开发学习之组件及事件处理 的相关文章

  • 在 Java 中连接和使用 Cassandra

    我已经阅读了一些关于 Cassandra 是什么以及它可以做什么的教程 但我的问题是如何在 Java 中与 Cassandra 交互 教程会很好 如果可能的话 有人可以告诉我是否应该使用 Thrift 还是 Hector 哪一个更好以及为什
  • Java new Date() 打印

    刚刚学习 Java 我知道这可能听起来很愚蠢 但我不得不问 System out print new Date 我知道参数中的任何内容都会转换为字符串 最终值是 new Date 返回对 Date 对象的引用 那么它是如何打印这个的呢 Mo
  • 如何在 Play java 中创建数据库线程池并使用该池进行数据库查询

    我目前正在使用 play java 并使用默认线程池进行数据库查询 但了解使用数据库线程池进行数据库查询可以使我的系统更加高效 目前我的代码是 import play libs Akka import scala concurrent Ex
  • Java JDBC:更改表

    我希望对此表进行以下修改 添加 状态列 varchar 20 日期列 时间戳 我不确定该怎么做 String createTable Create table aircraft aircraftNumber int airLineCompa
  • 使用 Android 发送 HTTP Post 请求

    我一直在尝试从 SO 和其他网站上的大量示例中学习 但我无法弄清楚为什么我编写的示例不起作用 我正在构建一个小型概念验证应用程序 它可以识别语音并将其 文本 作为 POST 请求发送到 node js 服务器 我已确认语音识别有效 并且服务
  • 制作一个交互式Windows服务

    我希望我的 Java 应用程序成为交互式 Windows 服务 用户登录时具有 GUI 的 Windows 服务 我搜索了这个 我发现这样做的方法是有两个程序 第一个是服务 第二个是 GUI 程序并使它们进行通信 服务将从 GUI 程序获取
  • Final字段的线程安全

    假设我有一个 JavaBeanUser这是从另一个线程更新的 如下所示 public class A private final User user public A User user this user user public void
  • 无法展开 RemoteViews - 错误通知

    最近 我收到越来越多的用户收到 RemoteServiceException 错误的报告 我每次给出的堆栈跟踪如下 android app RemoteServiceException Bad notification posted fro
  • 反射找不到对象子类型

    我试图通过使用反射来获取包中的所有类 当我使用具体类的代码 本例中为 A 时 它可以工作并打印子类信息 B 扩展 A 因此它打印 B 信息 但是当我将它与对象类一起使用时 它不起作用 我该如何修复它 这段代码的工作原理 Reflection
  • 如何在PreferenceActivity中添加工具栏

    我已经使用首选项创建了应用程序设置 但我注意到 我的 PreferenceActivity 中没有工具栏 如何将工具栏添加到我的 PreferenceActivity 中 My code 我的 pref xml
  • 如何将 pfx 文件转换为 jks,然后通过使用 wsdl 生成的类来使用它来签署传出的肥皂请求

    我正在寻找一个代码示例 该示例演示如何使用 PFX 证书通过 SSL 访问安全 Web 服务 我有证书及其密码 我首先使用下面提到的命令创建一个 KeyStore 实例 keytool importkeystore destkeystore
  • 加密 JBoss 配置中的敏感信息

    JBoss 中的标准数据源配置要求数据库用户的用户名和密码位于 xxx ds xml 文件中 如果我将数据源定义为 c3p0 mbean 我会遇到同样的问题 是否有标准方法来加密用户和密码 保存密钥的好地方是什么 这当然也与 tomcat
  • Java执行器服务线程池[关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 如果我使用 Executor 框架在
  • Google App Engine 如何预编译 Java?

    App Engine 对应用程序的 Java 字节码使用 预编译 过程 以增强应用程序在 Java 运行时环境中的性能 预编译代码的功能与原始字节码相同 有没有详细的信息这是做什么的 我在一个中找到了这个谷歌群组消息 http groups
  • 如何从指定日期获取上周五的日期? [复制]

    这个问题在这里已经有答案了 如何找出上一个 上一个 星期五 或指定日期的任何其他日期的日期 public getDateOnDay Date date String dayName 我不会给出答案 先自己尝试一下 但是 也许这些提示可以帮助
  • 在mockito中使用when进行模拟ContextLoader.getCurrentWebApplicationContext()调用。我该怎么做?

    我试图在使用 mockito 时模拟 ContextLoader getCurrentWebApplicationContext 调用 但它无法模拟 here is my source code Mock org springframewo
  • 如何从泛型类调用静态方法?

    我有一个包含静态创建方法的类 public class TestClass public static
  • 编译器抱怨“缺少返回语句”,即使不可能达到缺少返回语句的条件

    在下面的方法中 编译器抱怨缺少退货声明即使该方法只有一条路径 并且它包含一个return陈述 抑制错误需要另一个return陈述 public int foo if true return 5 鉴于Java编译器可以识别无限循环 https
  • 如何修复 JNLP 应用程序中的“缺少代码库、权限和应用程序名称清单属性”?

    随着最近的 Java 更新 许多人都遇到了缺少 Java Web Start 应用程序的问题Codebase Permissions and Application name体现属性 尽管有资源可以帮助您完成此任务 但我找不到任何资源综合的
  • 节拍匹配算法

    我最近开始尝试创建一个移动应用程序 iOS Android 它将自动击败比赛 http en wikipedia org wiki Beatmatching http en wikipedia org wiki Beatmatching 两

随机推荐

  • 内核LED驱动框架讲解以及led设备注册示例代码

    1 驱动框架介绍 1 内核中驱动部分维护者针对每个种类的驱动设计一套成熟的 标准的 典型的驱动实现 然后把不同厂家的同类硬件驱动中相同的部分抽出来自己实现好 再把不同部分留出接口给具体的驱动开发工程师来实现 这就叫驱动框架 2 内核维护者在
  • 涉密服务器 远程,一种具有远程定位功能的涉密移动存储系统及其实现方法专利_专利查询 - 天眼查...

    1 一种具有远程定位功能的涉密移动存储系统 其特征在于 该系统包括定位管理服 务器和移动存储介质 移动存储介质内设置有移动供电模块 定位通信模块 数据销毁模块 和数据存储模块 移动供电模块分别电连接定位通信模块 数据销毁模块和数据存储模块
  • adworld-pwn-level2

    必要知识点 32位系统函数调用使用堆栈传参 其调用时栈的结构如下 返回地址 gt 参数n gt 参数n 1 gt gt 参数1 将elf文件扔到IDA中 跟进到vulnerable函数 里面有输入函数 可以用来做栈溢出 再看到有system
  • 物联网LoRa系列-19:LoRa终端--射频芯片SX1261 SX1262的6种操作模式及其设置

    本文根据SX1261 2芯片手册 阐述SX161 2射频芯片的8种操作模式及其设置 目录 一 MCU与射频芯片之间的操作接口 二 SX1261 2射频芯片的6种工作模式的含义 三 SX1261 2射频芯片工作模式的设置 四 SX1261 2
  • 数组对象找重复值

    对象内容 let empListData lastName lin phone 154393456 lastName lin phone 154393456 lastName lin phone 154393456 找重方法 let new
  • linux-kali利用BeEF 执行 XSS 攻击

    一 配置靶机环境 1 登录win7靶机 2 访问https www xp cn 下载phpstudy软件 下载最新版的就可以 phpstudy软件可以用来进行站点搭建 3 解压后开始安装phpstudy 4 点击启动Apache服务与MyS
  • 关于 QML Tumbler 自定义日历在响应onWheel事件后,其他原有mouse事件无法响应

    程序是在QWidget窗体上嵌套QML 响应触屏和非触屏上面的一些鼠标滚动 滑动功能 在Tumbler下面的MouseArea中 onWheel响应了鼠标滚轮事件后 原来的其他鼠标事件没响应 help 求指点 工程上传到了百度云 链接 ht
  • 修改JAVA环境变量切换JAVA版本不生效问题

    最近因为项目原因 需要在java8和java11环境来回切换 windows切换环境变量没有Linux简单 通过shell脚本操作也会受到环境变量配置的影响 在修改环境变量来切换java版本时也会时不时出现没有生效的问题 一般出现这种问题
  • 2022年浙江省中职组“网络空间安全”赛项模块B--Linux渗透测试

    2022年中职组浙江省 网络空间安全 赛项 B 2 Linux渗透测试 漏洞原理解析 一 竞赛时间 420分钟 共计7小时 吃饭一小时 二 竞赛阶段 竞赛阶段 任务阶段 竞赛任务 竞赛时间 分值 第 阶段 单兵模式系统渗透测试 任务一 Wi
  • 万一 Github不让用了,Gitee同步指南请收好

    大家好 我是秋风 最近很多开源项目让一个本该纯粹的地方混入了政治色彩 例如 Node 还有 React 这些超明星级的项目 目前来看 React 的issues 已经沦陷了 大家都在反对一个原本纯粹的地方为什么会有了政治 如果说开源项目涉及
  • 相机 (2)旋转

    1 1 LookAt矩阵 用这3个轴外加一个平移向量来创建一个矩阵 并且你可以用这个矩阵乘以任何向量来将其变换到那个坐标空间 R是右向量 U是上向量 D是方向向量 P是摄像机位置向量 glm LookAt函数需要一个位置 目标和上向量以得到
  • CUDA unknown error - this may be due to an incorrectly set up environment

    运行mmaction2时报错 builtins RuntimeError CUDA unknown error this may be due to an incorrectly set up environment e g changin
  • 最全Arduino控制电机教程说明和资料分享

    1 电机介绍 1 1 作用 电机 gt 电磁感应 电能转化为动能 1 2 电机分类 工作电源 直流电机 DC 交流电机 AC 和交直流两用电机 直流电机分类 有刷直流电机和无刷直流电机 1 3 有刷直流电机模型及工作原理 左手定则 这种情况
  • 一篇文章教会你利用Python网络爬虫实现豆瓣电影采集

    一 项目背景 豆瓣电影提供最新的电影介绍及评论包括上映影片的影讯查询及购票服务 可以记录想看 在看和看过的电影电视剧 顺便打分 写影评 极大地方便了人们的生活 今天以电视剧 美剧 为例 批量爬取对应的电影 写入csv文档 用户可以通过评分
  • (Matlab实现)K-means算法及最佳聚类数目的确定

    目录 摘要 1 K means算法 2 Calinski Harabasz Criterion 卡林斯基 哈拉巴斯指标 CH值 3 Davies Bouldin Criterion 戴维斯 博尔丁指标 DB值 4 Gap Value Gap
  • ChatGPT大流行的思考-设想篇

    在ChatGPT火热当下 我们不妨设想一下它可以应用到我们生活和工作的哪些方面 作者在对ChatGPT有所了解后 从行业 宏观及微观的角度进行设想 积累灵感 并投身到模型建设中 希望对你也有所启发 一 宏观及微观角度的设想 1 宏观角度 行
  • SQL Server远程连接的设置

    SQL Server正常连接时 若不需要远程操控其他电脑 可以用Windows身份验证模式 但是涉及到远程处理时 需要通过SQL Server身份验证登录 具体操作如下 首先 我们在登录时 选择Windows身份验证 然后连接到服务器 图1
  • pip 下载慢——解决方法

    国内源 新版ubuntu要求使用https源 要注意 清华 https pypi tuna tsinghua edu cn simple 阿里云 http mirrors aliyun com pypi simple 中国科技大学 http
  • 手把手教你10分钟快速部署Kubernetes集群

    本文介绍的部署过程主要是为了让读者能够理解 K8S 的运行原理 为了简化流程 这里不涉及高可用 高性能等解决方案 安装说明 本文仅仅是在两个节点上部署所有的组件 如图所示包括 MASTER 和 NODE 所有的组件都安装在 opt comp
  • Java程序开发学习之组件及事件处理

    学习参考书 Java2实用教程第5版 一 GUI编程 容器类 Container 和组件类 Component javax swing包中JComponent类是java awt包中Container类的一个直接子类 java awt包中C