第十九章 java绘图

2023-12-28 09:12
文章标签 java 绘图 第十九章

本文主要是介绍第十九章 java绘图,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

 第十九章  java绘图

62e3ebfee94a4e2b95cd5c25a6378aa8.png

 19.1  java绘图类

绘图时高级程序设计中非常重要的技术,例如,应用程序可以绘制闪屏图片,背景图片,组件外观等等,Web程序可以绘制统计图,数据库存储图片资源等,真骨耸为“一图胜千言”,使用图片能够更好的表达程序运行结果,并且能够进行细致的数据分析与保存等等   本小节分为Graphics与Graphics2D小部分

19.1.1Graphics类

Graphics类是所有图形上下文的抽象基类,它允许应用提供程序在组件以及闭屏图像上进行绘制Graphics类封装了java支持的基本绘图操作所需要的状态信息,主要包括了颜色,字体,画笔,文本,图像等

Graphics类提供了绘图常用的方法,利用了这些方法可以实现,直线,矩形,多边形,椭圆,圆弧等,形状和文本,图片的绘制操作。另外,在执行这些操作之前,还可以使用相应的方法,设置绘图的颜色和字体等状态属性

19.1.2Graphics2D类 

使用Graphics2D类可以完成简单的图形绘制任务,但是她所实现的功能非常有限,如无法改变线条的粗细,不能对图片使用旋转和模糊等过滤效果

Graphics2D类继承了Graphics类,实现了功能更加强大的绘图操作的集合。由于Graphics2D类 是Graphics类的拓展,也是推荐使用Java绘图类,

19.2绘制图形

java可以分别使用Graphics类和Graphics2D类绘制图形,Graphics类使用不同的方法实现绘制不同的图形,例如 drawLine()方法可以绘制执行,drawRect()方法绘制矩形,drawOval()方法用于绘制椭圆等

如下例题所示:

 
  1. import java.awt.Graphics;

  2.  
  3. import javax.swing.JFrame;

  4. import javax.swing.JPanel;

  5.  
  6. public class DrawCircle1 extends JFrame{

  7. private final int OVAL_WIDTH=80;

  8. private final int OVAL_HEIGHT=80;

  9.  
  10. public DrawCircle1() {

  11. initialize();

  12. }

  13. private void initialize(){

  14. setSize(300,200);//设置窗体大小

  15. setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//关闭窗体则停止程序

  16. setContentPane(new DrawPanel());//设置窗体面板为画布面板对象

  17. setTitle("绘图实列");

  18. }

  19. class DrawPanel extends JPanel{

  20. public void paint(Graphics g) {

  21. //五个圆圈的坐标位置

  22. g.drawRect(10, 10, OVAL_WIDTH, OVAL_HEIGHT);//圆的坐标是左上角 并不是圆心坐标

  23. g.drawOval(80, 10, OVAL_WIDTH, OVAL_HEIGHT);

  24. g.drawOval(150, 10, OVAL_WIDTH, OVAL_HEIGHT);

  25. g.drawOval(50, 70, OVAL_WIDTH, OVAL_HEIGHT);

  26. g.drawOval(120, 70, OVAL_WIDTH, OVAL_HEIGHT);

  27. }

  28. }

  29. public static void main(String[] args) {

  30. new DrawCircle1().setVisible(true);

  31. }

  32. }

代码图以及运行结果图:

521dc7ce1ee64d5ab0907a4ad163f792.png

 使用Graphics2D类来绘制空心和实心集合图形

例题如下:

 
  1. import java.awt.BasicStroke;

  2. import java.awt.Color;

  3. import java.awt.Graphics;

  4. import java.awt.Graphics2D;

  5. import java.awt.Shape;

  6. import java.awt.geom.Ellipse2D;

  7. import java.awt.geom.Rectangle2D;

  8.  
  9. import javax.swing.JFrame;

  10. import javax.swing.JPanel;

  11.  
  12. public class DrawFarme1 extends JFrame{

  13. public DrawFarme1() {

  14. setTitle("绘制实例2");//设置窗体标本

  15. setSize(300,200);//设置窗体大小

  16. setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//设置窗体关闭模式

  17. add(new CanvasPanel());//设置窗体面板为绘图面板对象

  18. }

  19. class CanvasPanel extends JPanel{//绘图面板

  20. public void paint (Graphics g ) {

  21. Graphics2D g2 =(Graphics2D)g;

  22. Shape[] shapes = new Shape[4];//声明图片数组

  23. shapes[0]= new Ellipse2D.Double(5,5,100,100);//创建圆型对象

  24. shapes[1]=new Rectangle2D.Double(110,5,100,100);//创建矩形对象

  25. shapes[2]=new Rectangle2D.Double(15,15,80,80);//创建矩形对象

  26. shapes[3]=new Ellipse2D.Double(120,15,80,80);//创建圆形对象

  27. for(Shape shape:shapes) {//遍历图形

  28. Rectangle2D bounds =shape.getBounds2D();//

  29. if(bounds.getWidth()==80) {

  30. Color c= new Color(255,0,0);//绘制颜色

  31. g2.setColor(c);

  32. BasicStroke b =new BasicStroke(6,1,1);//绘制画笔粗细

  33. g2.setStroke(b);

  34. g2.fill(shape);//填充图像

  35. }else {

  36. Color c1 = new Color(0,0,255);

  37. g2.setColor(c1);

  38. BasicStroke b =new BasicStroke(6,1,1);//绘制画笔粗细

  39. g2.setStroke(b);

  40. g2.draw(shape);//绘制图形

  41.  
  42. //圆形的端点是1 拐角是1

  43. //另一个是0是常规 1是圆 2是直

  44. }

  45. }

  46. }

  47. }

  48. public static void main(String[] args) {

  49. new DrawFarme1().setVisible(true);

  50. }

  51.  
  52. }

 代码图以及运行结果图如下:
afb0614cda9347fcb846c8b7eba6a37b.png

19.3绘制颜色和画笔属性 

java语言使用Color类封装颜色的各种属性,并对颜色进行管理。另外,在绘制图形是,还可以只盯线的粗细,和叙事等画笔属性,

19.3.1设置颜色

使用Color类可以创建任意颜色的对象,不用担心平台是否支持改颜色,因为java以跨平台和硬件无关的方式支持颜色管理创建Color对象的构造方法有如下两种方法:

 
  1. Color col = new Color (int r , int g ,int b);

  2. Color col = new Color (int rgb);

 
  1. rgb:颜色值,该值是,红,绿,蓝,三原色的总和,

  2. r :该参数是三原色中的红色的取值;

  3. g :该参数是三原色中的绿色的取值;

  4. b :该参数是三原色中的蓝色的取值;

设置当前绘图颜色为红色的代码如下:

 
  1. public void paint(Graphics g){

  2. Graphics2D g2 =(Graphics2D )g;

  3. g.setColor(Color.RED)

  4. ...

  5. }

19.3.2  设置画笔

默认抢矿下Graphics类使用的画笔属性的粗细为1像素的正方形,而Graphics2D类可以体哦啊用setStroke()方法设置画笔的属性,如改变线条的粗细,叙事,定义线段端点的形状,风格等,如法如下:

setStroke(Stroke stroke)

其中参数stroke是Stroke接口的实现类对象、

setStroke()方法必须接受一个Stroke接口的实现类对象作参数,java.awt包中的提供了BasicStroke类它实现了Stroke接口并不通过的构造方法画笔属性不同的对象构造方法如下:

 
  1. BasicStroke();

  2. BasicStroke(float width );

  3. BasicStroke(float width int cap,int join );

  4. BasicStroke(float width , int cap , int join ,float minterlimit);

  5. BasicStroke(float width , int cap , int join ,float minterlimit,float[] dash,float dash_phase);

cap参数可以使用CAP_BUTT,CAP_ROUND和CAO_SQUAR

19.4绘制文本

java会之类也可以用来绘制文本内容,且可以在会之前设置字体的样式和大小等,

19.4.1设置字体

java使用Font类封装了字体的大小,样式等属性,该类在java.awt包中定义,其构造方法可以指定字体名称和大小和样式三个属性如法如下:

Font font = new  Font("宋体",Font.BOLD,16);//这是文字为宋体    字体为加粗  定义字体大小

其中Font.BOLD 是调用字体格式   有三种 0是普通  1是加粗 (就是现在这个)2是倾斜如下所示

2067566d94944507ba5a7842322319a4.png

 19.4.2显示文字

Graphics2D类提供了drawString()方法,使用该方法可以实现推行上下文的文本绘制,从而实现在图片上显示文字的功能如法如下:

 
  1. drawString(String str , int x,int y);

  2. drawString(String str,float x , float y);

 其中str是要绘制的文本字符串, x是绘制字符串的水平起始位置,  y是绘制字符串的垂直起始位置  

这两个方法唯一不同的就是x和y的参数类型不同

如下例题讲解了使用方法:

 
  1. import java.awt.Color;

  2. import java.awt.Font;

  3. import java.awt.Graphics;

  4. import java.awt.Graphics2D;

  5. import java.awt.geom.Rectangle2D;

  6. import java.util.Date;

  7.  
  8. import javax.swing.JFrame;

  9. import javax.swing.JPanel;

  10.  
  11. public class DrawString extends JFrame{

  12. public DrawString(){

  13. setSize(230,140);//绘制窗体大小

  14. setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//设施窗体关闭模式

  15. add(new CanvasPanel());//设置窗体面板为绘图面板对象

  16. setTitle("绘制文本");//设置窗体标签

  17. }

  18. class CanvasPanel extends JPanel{

  19. public void paint(Graphics g) {

  20. Graphics2D g2 = (Graphics2D)g;

  21. Rectangle2D rect = new Rectangle2D.Double(10,10,200,80);

  22. Font font = new Font("宋体",Font.BOLD,16);//这是文字为宋体 字体为加粗 定义字体大小

  23. Date date = new Date ();

  24. g2.setColor(Color.cyan);//设置当前绘图颜色

  25. g2.fill(rect);//填充矩形

  26. g2.setColor(Color.blue);//设置当前绘图颜色

  27. g2.setFont(font);//设置字体

  28. g2.drawString("现在的时间是", 20,30);//绘制文本

  29. g2.drawString(String.format("%tr", date),50,60);//绘制时间文本

  30. }

  31. }

  32. public static void main(String[] args) {

  33. new DrawString().setVisible(true);

  34. }

  35.  
  36. }

代码图以及运行结果图:

cf738a1d6b3044cdafce19c5b26a24fd.png

 19.5  显示图片

绘制类不仅可以是绘制图形和文本还可以使用drawImage()方法将图片资源显示在绘图上下文中,而且可以实现各种特效处理,如:图片的缩放,反转等。语法如下:

drawImage(drawImage img ,int x,int y,ImageObserver voserver)

img  是要显示的对象   x是水平位置,  y是垂直位置,observer是要通知的图像观察者

如下代码所示;

 
  1. import java.awt.Graphics;

  2. import java.awt.Graphics2D;

  3. import java.awt.Image;

  4. import java.io.File;

  5. import java.io.IOException;

  6.  
  7. import javax.imageio.ImageIO;

  8. import javax.swing.JFrame;

  9. import javax.swing.JPanel;

  10.  
  11. public class Drawlmage extends JFrame{

  12. Image img;//展示图片

  13. public Drawlmage () {

  14. try {

  15. img=ImageIO.read(new File ("C:\\Users\\dog luo\\Desktop\\小黄人.jpg"));//读取图片位置

  16. }catch (IOException e ) {

  17. e.printStackTrace();

  18. }

  19. setSize(1000,3000);//设置窗体大小

  20. setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//关闭窗体

  21. add(new CanvasPanel());//设置窗体面板为绘图面板对象

  22. setTitle("绘制图片");// 设置窗体标题

  23. }

  24. class CanvasPanel extends JPanel{

  25. public void paint(Graphics g) {

  26. Graphics2D g2 = (Graphics2D )g;

  27. g2.drawImage(img, 0, 0, this);//显示图片

  28. }

  29. }

  30. public static void main(String[] args) {

  31. new Drawlmage().setVisible(true);

  32. }

  33.  
  34. }

代码图以及运行结果图:

999357295ab14fd0a7c4f717eda89378.png

 19.6 图像处理:

开高级桌面应用程序,必须掌握一些图像处理与动画制作的技术,如在程序中显示统计图和销售趋势图,动态按钮等等

19.6.1放大与缩小

放大与缩小是使用了drawImage()方法将图片以原始的大小显示在窗体中,想要实现图片的放大下与缩小,则需要使用他的重载方法,语法如下:

drawImage(Image img,int x, int y,  int width , int height , ImageObserver observer)

该方法将img图片显示在x,y指定的位置上,并指定图片的宽度和高度的属性,

以下代码会讲解使用方法:

 
  1. import java.awt.BorderLayout;

  2. import java.awt.Graphics;

  3. import java.awt.Image;

  4. import java.io.File;

  5. import java.io.IOException;

  6.  
  7. import javax.imageio.ImageIO;

  8. import javax.swing.JFrame;

  9. import javax.swing.JPanel;

  10. import javax.swing.JSlider;

  11. import javax.swing.event.ChangeEvent;

  12. import javax.swing.event.ChangeListener;

  13.  
  14. public class lmageZoom extends JFrame{

  15. Image img;

  16. private int imgWidth ,imgHeight;

  17. private JSlider jSlider;

  18. public lmageZoom() {

  19. try {

  20. img = ImageIO.read(new File("C:\\Users\\dog luo\\Desktop\\搁浅.jpg"));

  21. }catch(IOException e) {

  22. e.printStackTrace();

  23. }

  24. CanvasPanel canvas = new CanvasPanel();

  25. jSlider = new JSlider();

  26. jSlider.setMaximum(1000);

  27. jSlider.setValue(100);

  28. jSlider.setMinimum(1);

  29. jSlider.addChangeListener(new ChangeListener() {

  30. public void stateChanged(ChangeEvent e) {

  31. canvas.repaint();

  32. }

  33. });

  34. JSlider center= new JSlider();

  35. center.setLayout(new BorderLayout());

  36. center.add(jSlider,BorderLayout.SOUTH);

  37. center.add(canvas,BorderLayout.CENTER);

  38. setContentPane(center);

  39. setBounds(100,100,800,860);

  40. setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

  41. setTitle("绘制图片");

  42. }

  43. class CanvasPanel extends JPanel{

  44. public void paint(Graphics g ) {

  45. int newW = 0 ,newH = 0;

  46. imgWidth = img.getWidth(this);

  47. imgHeight =img.getHeight(this);

  48. float value =jSlider.getValue();

  49. newW = (int)(imgWidth*value/100);

  50. newH = (int)(imgHeight*value/100);

  51. g.drawImage(img,0,0,newW,newH,this );

  52. }

  53. }

  54. public static void main(String[] args) {

  55. new lmageZoom().setVisible(true);

  56.  
  57. }

  58.  
  59. }

代码图以及运行结果图:

f9204cf5f08d4f02b61deeececfdabf7.png

 19.6.2图像翻转

图像的翻转需要使用drawImage()方法的另一个重载方法 语法如下:

drawImage(Image img , int dx1,int dy1,int dx2,int dy2, int sx1, int sy1, int sx2, int sy2,ImageObserver observer)

此方法总是用非缩放的图像来呈现缩放的矩形,并动态的执行所需的缩放,次操作不适用缓存缩放图像,执行图像从源到目标的缩放,将源矩形的第一个坐标映射到目标矩形的第一个坐标,源矩形的第二个坐标映射到目标矩形的第二个坐标,按需求缩放和反转子图像,以保持这些映射关系。

主要的使用方法以下例题会详细讲解:

 
  1. import java.awt.BorderLayout;

  2. import java.awt.Container;

  3. import java.awt.Graphics;

  4. import java.awt.Image;

  5. import java.awt.event.ActionEvent;

  6. import java.awt.event.ActionListener;

  7. import java.io.File;

  8. import java.io.IOException;

  9.  
  10. import javax.imageio.ImageIO;

  11. import javax.swing.JButton;

  12. import javax.swing.JFrame;

  13. import javax.swing.JPanel;

  14.  
  15. public class Partlmage extends JFrame{

  16. private Image img;

  17. private int dx1,dy1,dx2,dy2;

  18. private int sx1,sy1,sx2,sy2;

  19. private int width = 300,height=200;//图片宽高

  20. private JButton vBtn = null;//"垂直翻转"

  21. private JButton hBtn = null;//"水平反转"

  22.  
  23. private CanvasPanel canvasPanel = null;

  24. public Partlmage()

  25. {try {

  26. img=ImageIO.read(new File("C:\\Users\\dog luo\\Desktop\\搁浅.jpg"));//获取图片文件

  27. }catch (IOException e) {

  28. e.printStackTrace();

  29. }//初始化图像大小

  30. dx2= sx2=width;

  31. dy2= sy2=height;

  32.  
  33. vBtn = new JButton("垂直翻转");

  34. hBtn = new JButton("水平翻转");

  35.  
  36. JPanel bottom = new JPanel();

  37. bottom.add(hBtn);

  38. bottom.add(vBtn);

  39.  
  40. Container c = getContentPane();

  41. c.add(bottom,BorderLayout.SOUTH);

  42. canvasPanel = new CanvasPanel();

  43. c.add(canvasPanel,BorderLayout.CENTER);

  44.  
  45. addListener();

  46. setBounds(100,100,300,260);//设置窗体大小和位置

  47. setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//设置窗体关闭模式

  48. setTitle("图片翻转");//设置窗体标题

  49.  
  50. }

  51. private void addListener() {

  52. vBtn.addActionListener(new ActionListener() {

  53. public void actionPerformed(ActionEvent e ) {

  54. sy1 = Math.abs(sy1 - height);//纵坐标互换

  55. sy2 = Math.abs(sy2 - height);

  56. canvasPanel.repaint();

  57. }

  58. });

  59. hBtn.addActionListener(new ActionListener() {

  60. public void actionPerformed( ActionEvent e ) {

  61. sx1 = Math.abs(sx1 - width);//横坐标呼唤

  62. sx2 = Math.abs(sx2 - width);

  63. canvasPanel.repaint();

  64. }

  65. });

  66. }

  67. class CanvasPanel extends JPanel{

  68. public void paint(Graphics g) {

  69. g.drawImage(img, dx1, dy1, dx2, dy2, sx1, sy1, sx2, sy2, this);//绘制指定大小的图片

  70. }

  71. }

  72. public static void main(String[] args) {

  73. // TODO Auto-generated method stub

  74. new Partlmage().setVisible(true);

  75. }

  76.  
  77. }

 代码图以及运行结果图如下所示:

19.6.3图像旋转

图像旋转需要调用Graphics2D类的rotate()方法,该方法根据指定的弧度来旋转图下   主要的语法如下:

rotate(double theta);//theta是直旋转的弧度

 以下例题会讲解主要的使用方法:

 
  1. import java.awt.Graphics;

  2. import java.awt.Graphics2D;

  3. import java.awt.Image;

  4. import java.io.File;

  5. import java.io.IOException;

  6.  
  7. import javax.imageio.ImageIO;

  8. import javax.swing.JFrame;

  9. import javax.swing.JPanel;

  10.  
  11. public class RotateImage extends JFrame{

  12. private Image img ;

  13. public RotateImage() {

  14. try {

  15. img = ImageIO.read(new File("C:\\Users\\dog luo\\Desktop\\搁浅.jpg"));//读取图片文件

  16. }catch(IOException e ) {

  17. e.printStackTrace();

  18. }

  19. setBounds(100,100,400,500);

  20. add(new CanvasPanel());

  21. setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//设施窗体关闭模式

  22. setTitle("图片旋转");//设置窗体标题;

  23. }

  24. class CanvasPanel extends JPanel{

  25. public void paint(Graphics g) {

  26. Graphics2D g2 = (Graphics2D)g;

  27. g2.rotate(Math.toRadians(5));//旋转5

  28. g2.drawImage(img,70,10,300,200,this);

  29. g2.rotate(Math.toRadians(5));

  30. g2.drawImage(img,70,10,300,200,this);

  31. g2.rotate(Math.toRadians(5));

  32. g2.drawImage(img,70,10,300,200,this);

  33. }

  34. }

  35. public static void main(String[]args) {

  36. new RotateImage().setVisible(true);

  37. }

  38. }

代码图以及运行结果图如下所示:

e37f8e4b319641a98f74f58fa467a65e.png

19.6.4图像倾斜 

可以使用Graphics2D类提供的sjear()放啊设置绘图的倾斜的方向,从而使图像侵袭呃的效果语法如下:

 
  1. shear(double shx,double shy);

  2. //shx 水平方向的倾斜度

  3. //shy 垂直方向的倾斜度

详细的如下例题所示:

 
  1. import java.awt.Graphics;

  2. import java.awt.Graphics2D;

  3. import java.awt.Image;

  4. import java.io.File;

  5. import java.io.IOException;

  6. import javax.imageio.ImageIO;

  7. import javax.swing.JFrame;

  8. import javax.swing.JPanel;

  9.  
  10. public class Tiltmage extends JFrame{

  11. private Image img;

  12. public Tiltmage() {

  13. try {

  14. img = ImageIO.read(new File("C:\\Users\\dog luo\\Desktop\\搁浅.jpg"));//读取文件位置

  15. }catch(IOException e ) {

  16. e.printStackTrace();

  17. }

  18. setBounds(100,100,400,300);

  19. add(new CanvasPanel());

  20. setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//设施窗体关闭模式

  21. setTitle("图片旋转");//设置窗体标题;

  22. }

  23. class CanvasPanel extends JPanel{

  24. public void paint(Graphics g) {

  25. Graphics2D g2 = (Graphics2D)g;

  26. g2.shear(0.3, 0);//倾斜30%

  27. g2.drawImage(img, 0, 0, 300, 200,this);

  28. }

  29. }

  30. public static void main(String[]args) {

  31. new Tiltmage().setVisible(true);

  32.  
  33. }

  34. }

代码图以及运行结果图如下:

0a71af1d8fa748eda3ac345719946c48.png

 

这篇关于第十九章 java绘图的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/545499

相关文章

Spring Security基于数据库的ABAC属性权限模型实战开发教程

《SpringSecurity基于数据库的ABAC属性权限模型实战开发教程》:本文主要介绍SpringSecurity基于数据库的ABAC属性权限模型实战开发教程,本文给大家介绍的非常详细,对大... 目录1. 前言2. 权限决策依据RBACABAC综合对比3. 数据库表结构说明4. 实战开始5. MyBA

Spring Security方法级安全控制@PreAuthorize注解的灵活运用小结

《SpringSecurity方法级安全控制@PreAuthorize注解的灵活运用小结》本文将带着大家讲解@PreAuthorize注解的核心原理、SpEL表达式机制,并通过的示例代码演示如... 目录1. 前言2. @PreAuthorize 注解简介3. @PreAuthorize 核心原理解析拦截与

一文详解JavaScript中的fetch方法

《一文详解JavaScript中的fetch方法》fetch函数是一个用于在JavaScript中执行HTTP请求的现代API,它提供了一种更简洁、更强大的方式来处理网络请求,:本文主要介绍Jav... 目录前言什么是 fetch 方法基本语法简单的 GET 请求示例代码解释发送 POST 请求示例代码解释

Java图片压缩三种高效压缩方案详细解析

《Java图片压缩三种高效压缩方案详细解析》图片压缩通常涉及减少图片的尺寸缩放、调整图片的质量(针对JPEG、PNG等)、使用特定的算法来减少图片的数据量等,:本文主要介绍Java图片压缩三种高效... 目录一、基于OpenCV的智能尺寸压缩技术亮点:适用场景:二、JPEG质量参数压缩关键技术:压缩效果对比

Java调用C++动态库超详细步骤讲解(附源码)

《Java调用C++动态库超详细步骤讲解(附源码)》C语言因其高效和接近硬件的特性,时常会被用在性能要求较高或者需要直接操作硬件的场合,:本文主要介绍Java调用C++动态库的相关资料,文中通过代... 目录一、直接调用C++库第一步:动态库生成(vs2017+qt5.12.10)第二步:Java调用C++

springboot+dubbo实现时间轮算法

《springboot+dubbo实现时间轮算法》时间轮是一种高效利用线程资源进行批量化调度的算法,本文主要介绍了springboot+dubbo实现时间轮算法,文中通过示例代码介绍的非常详细,对大家... 目录前言一、参数说明二、具体实现1、HashedwheelTimer2、createWheel3、n

Java利用docx4j+Freemarker生成word文档

《Java利用docx4j+Freemarker生成word文档》这篇文章主要为大家详细介绍了Java如何利用docx4j+Freemarker生成word文档,文中的示例代码讲解详细,感兴趣的小伙伴... 目录技术方案maven依赖创建模板文件实现代码技术方案Java 1.8 + docx4j + Fr

SpringBoot首笔交易慢问题排查与优化方案

《SpringBoot首笔交易慢问题排查与优化方案》在我们的微服务项目中,遇到这样的问题:应用启动后,第一笔交易响应耗时高达4、5秒,而后续请求均能在毫秒级完成,这不仅触发监控告警,也极大影响了用户体... 目录问题背景排查步骤1. 日志分析2. 性能工具定位优化方案:提前预热各种资源1. Flowable

基于SpringBoot+Mybatis实现Mysql分表

《基于SpringBoot+Mybatis实现Mysql分表》这篇文章主要为大家详细介绍了基于SpringBoot+Mybatis实现Mysql分表的相关知识,文中的示例代码讲解详细,感兴趣的小伙伴可... 目录基本思路定义注解创建ThreadLocal创建拦截器业务处理基本思路1.根据创建时间字段按年进

Java编译生成多个.class文件的原理和作用

《Java编译生成多个.class文件的原理和作用》作为一名经验丰富的开发者,在Java项目中执行编译后,可能会发现一个.java源文件有时会产生多个.class文件,从技术实现层面详细剖析这一现象... 目录一、内部类机制与.class文件生成成员内部类(常规内部类)局部内部类(方法内部类)匿名内部类二、