从此
📄文章 #️⃣专题 🌐酷站 👨‍💻技术 📺 📱

Java 桌面开发 - Swing、AWT、JNA、FFM

Java 桌面开发 - Swing、AWT、JNA、FFM 客户端技术

综述

主要

JOptionPane.showMessageDialog(null, "对话框文字");

JEditorPane:
  // 清空内容:
  jEditorPane.setText(""); // 会残留一些样式,想彻底清空可用下行:
  jEditorPane.setDocument(jEditorPane.getEditorKit().createDefaultDocument());

  // 滚动至底部:
  jEditorPane.setCaretPosition(jEditorPane.getDocument().getLength());



关闭所有extends WindowAdapter覆写了windowClosing方法的窗口:
        var we = new WindowEvent(this, WindowEvent.WINDOW_CLOSING);
        Toolkit.getDefaultToolkit().getSystemEventQueue().postEvent(we);
JDK FFM(Foreign Function & Memory API)取代JNA和JNI之系统调用C库实例(JDK22正式支持):
  var nl = Linker.nativeLinker();
  var mh = nl.downcallHandle(nl.defaultLookup().find("_getpid").get(),
    FunctionDescriptor.of(JAVA_INT)); //or FunctionDescriptor.ofVoid(...)
  // mh.invokeExact(Arena.openConfined().allocateUtf8String("x"));
  var r = (int) mh.invokeExact(); System.out.println(r);

  纯Java获取Process ID (PID):ProcessHandle.current().pid();
  
  如果库文件规模过大,可采用jextract方式生成Java待调用的胶水代码:
    jextract 抽取C库头文件生成 Foreign Function & Memory API 绑定类

  库主要分为两类:静态库和动态库(共享库)。
   1. windows中静态库是以 .lib 为后缀的文件,动态库是以 .dll 为后缀的文件。
   2. linux中静态库是以 .a 为后缀的文件,动态库是以 .so为后缀的文件。
   3. mac中静态库是以.a为后缀的文件,动态库是以.dylib为后缀的文件。


其他