基于jfreechart生成曲線、柱狀等圖片并展示到JSP
雖然現(xiàn)在JS做報(bào)表和圖形展示已經(jīng)非常普遍和漂亮了,但是不能忽略有jfreechart 這樣一種東西!
這些翻閱資料,在看以前寫的示例時(shí)發(fā)現(xiàn)了關(guān)于jfreechart 的簡(jiǎn)單示例,不管怎樣發(fā)上來分享一下!

這個(gè)示例使用JSP和Servlet做后臺(tái)和前臺(tái)展示,下面有源代碼可以直接運(yùn)行!
生產(chǎn)線型趨勢(shì)圖:
package com.xidian.servlet;
import java.awt.Color;
import java.awt.Font;
import java.io.*;
import java.text.SimpleDateFormat;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.jfree.chart.*;
import org.jfree.chart.axis.DateAxis;
import org.jfree.chart.axis.ValueAxis;
import org.jfree.chart.plot.XYPlot;
import org.jfree.chart.renderer.xy.XYItemRenderer;
import org.jfree.chart.renderer.xy.XYLineAndShapeRenderer;
import org.jfree.chart.title.TextTitle;
import org.jfree.data.time.Day;
import org.jfree.data.time.TimeSeries;
import org.jfree.data.time.TimeSeriesCollection;
import org.jfree.data.xy.XYDataset;
/**
* 生產(chǎn)線型趨勢(shì)圖
* @說明
* @author cuisuqiang
* @version 1.0
* @since
*/
@SuppressWarnings("serial")
public class LineServlet extends HttpServlet {
@SuppressWarnings("deprecation")
@Override
protected void service(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html");
// 在Mysql中使用 select
// year(accessdate),month(accessdate),day(accessdate),count(*)
// 其中accessdate 是一個(gè)date類型的時(shí)間
// 時(shí)間序列對(duì)象集合
TimeSeriesCollection chartTime = new TimeSeriesCollection();
// 時(shí)間序列對(duì)象,第1個(gè)參數(shù)表示時(shí)間序列的名字,第2個(gè)參數(shù)是時(shí)間類型,這里為天
// 該對(duì)象用于保存前count天每天的訪問次數(shù)
TimeSeries timeSeries = new TimeSeries("日訪問", Day.class);
// 為了演示,直接拼裝數(shù)據(jù)
// Day的組裝格式是day-month-year 訪問次數(shù)
timeSeries.add(new Day(1, 1, 2010), 50);
timeSeries.add(new Day(2, 1, 2010), 47);
timeSeries.add(new Day(3, 1, 2010), 82);
timeSeries.add(new Day(4, 1, 2010), 95);
timeSeries.add(new Day(5, 1, 2010), 104);
timeSeries.add(new Day(6, 1, 2010), 425);
chartTime.addSeries(timeSeries);
XYDataset date = chartTime;
try {
// 使用ChartFactory來創(chuàng)建時(shí)間序列的圖表對(duì)象
JFreeChart chart = ChartFactory.createTimeSeriesChart(
"網(wǎng)站每天訪問統(tǒng)計(jì)", // 圖形標(biāo)題
"日期", // X軸說明
"訪問量", // Y軸說明
date, // 數(shù)據(jù)
true, // 是否創(chuàng)建圖例
true, // 是否生成Tooltips
false // 是否生產(chǎn)URL鏈接
);
// 設(shè)置整個(gè)圖片的背景色
chart.setBackgroundPaint(Color.PINK);
// 設(shè)置圖片有邊框
chart.setBorderVisible(true);
// 獲得圖表區(qū)域?qū)ο?
XYPlot xyPlot = (XYPlot) chart.getPlot();
// 設(shè)置報(bào)表區(qū)域的背景色
xyPlot.setBackgroundPaint(Color.lightGray);
// 設(shè)置橫 縱坐標(biāo)網(wǎng)格顏色
xyPlot.setDomainGridlinePaint(Color.GREEN);
xyPlot.setRangeGridlinePaint(Color.GREEN);
// 設(shè)置橫、縱坐標(biāo)交叉線是否顯示
xyPlot.setDomainCrosshairVisible(true);
xyPlot.setRangeCrosshairVisible(true);
// 獲得數(shù)據(jù)點(diǎn)(X,Y)的render,負(fù)責(zé)描繪數(shù)據(jù)點(diǎn)
XYItemRenderer xyItemRenderer = xyPlot.getRenderer();
if (xyItemRenderer instanceof XYLineAndShapeRenderer) {
XYLineAndShapeRenderer xyLineAndShapeRenderer = (XYLineAndShapeRenderer) xyItemRenderer;
xyLineAndShapeRenderer.setShapesVisible(true); // 數(shù)據(jù)點(diǎn)可見
xyLineAndShapeRenderer.setShapesFilled(true); // 數(shù)據(jù)點(diǎn)是實(shí)心點(diǎn)
xyLineAndShapeRenderer.setSeriesFillPaint(0, Color.RED); // 數(shù)據(jù)點(diǎn)填充為藍(lán)色
xyLineAndShapeRenderer.setUseFillPaint(true);// 將設(shè)置好的屬性應(yīng)用到render上
}
// 配置以下內(nèi)容方可解決亂碼問題
// 配置字體
Font xfont = new Font("宋體", Font.PLAIN, 12); // X軸
Font yfont = new Font("宋體", Font.PLAIN, 12); // Y軸
Font kfont = new Font("宋體", Font.PLAIN, 12); // 底部
Font titleFont = new Font("宋體", Font.BOLD, 25); // 圖片標(biāo)題
// 圖片標(biāo)題
chart.setTitle(new TextTitle(chart.getTitle().getText(), titleFont));
// 底部
chart.getLegend().setItemFont(kfont);
// X 軸
ValueAxis domainAxis = xyPlot.getDomainAxis();
domainAxis.setLabelFont(xfont);// 軸標(biāo)題
domainAxis.setTickLabelFont(xfont);// 軸數(shù)值
domainAxis.setTickLabelPaint(Color.BLUE); // 字體顏色
// Y 軸
ValueAxis rangeAxis = xyPlot.getRangeAxis();
rangeAxis.setLabelFont(yfont);
rangeAxis.setLabelPaint(Color.BLUE); // 字體顏色
rangeAxis.setTickLabelFont(yfont);
// 定義坐標(biāo)軸上日期顯示的格式
DateAxis dateAxis = (DateAxis) xyPlot.getDomainAxis();
// 設(shè)置日期格式
dateAxis.setDateFormatOverride(new SimpleDateFormat("yyyy-MM-dd"));
// 向客戶端輸出生成的圖片
ChartUtilities.writeChartAsJPEG(response.getOutputStream(), 1.0f,
chart, 500, 300, null);
} catch (Exception e) {
e.printStackTrace();
}
}
}
生產(chǎn)柱狀圖:
package com.xidian.servlet;
import java.awt.Color;
import java.awt.Font;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartUtilities;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.axis.CategoryAxis;
import org.jfree.chart.axis.NumberAxis;
import org.jfree.chart.plot.CategoryPlot;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.chart.renderer.category.BarRenderer;
import org.jfree.chart.title.TextTitle;
import org.jfree.data.category.DefaultCategoryDataset;
/**
* 生產(chǎn)柱狀圖
* @說明
* @author cuisuqiang
* @version 1.0
* @since
*/
@SuppressWarnings("serial")
public class PillarServlet extends HttpServlet {
@Override
protected void service(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html");
// 使用普通數(shù)據(jù)集
DefaultCategoryDataset chartDate = new DefaultCategoryDataset();
// 增加測(cè)試數(shù)據(jù),第一個(gè)參數(shù)是訪問量,最后一個(gè)是時(shí)間,中間是顯示用不考慮
chartDate.addValue(55, "訪問量", "2010-01");
chartDate.addValue(65, "訪問量", "2010-02");
chartDate.addValue(59, "訪問量", "2010-03");
chartDate.addValue(156, "訪問量", "2010-04");
chartDate.addValue(452, "訪問量", "2010-05");
chartDate.addValue(359, "訪問量", "2010-06");
try {
// 從數(shù)據(jù)庫(kù)中獲得數(shù)據(jù)集
DefaultCategoryDataset data = chartDate;
// 使用ChartFactory創(chuàng)建3D柱狀圖,不想使用3D,直接使用createBarChart
JFreeChart chart = ChartFactory.createBarChart3D(
"網(wǎng)站月訪問量統(tǒng)計(jì)", // 圖表標(biāo)題
"時(shí)間", // 目錄軸的顯示標(biāo)簽
"訪問量", // 數(shù)值軸的顯示標(biāo)簽
data, // 數(shù)據(jù)集
PlotOrientation.VERTICAL, // 圖表方向,此處為垂直方向
// PlotOrientation.HORIZONTAL, //圖表方向,此處為水平方向
true, // 是否顯示圖例
true, // 是否生成工具
false // 是否生成URL鏈接
);
// 設(shè)置整個(gè)圖片的背景色
chart.setBackgroundPaint(Color.PINK);
// 設(shè)置圖片有邊框
chart.setBorderVisible(true);
Font kfont = new Font("宋體", Font.PLAIN, 12); // 底部
Font titleFont = new Font("宋體", Font.BOLD, 25); // 圖片標(biāo)題
// 圖片標(biāo)題
chart.setTitle(new TextTitle(chart.getTitle().getText(), titleFont));
// 底部
chart.getLegend().setItemFont(kfont);
// 得到坐標(biāo)設(shè)置字體解決亂碼
CategoryPlot categoryplot = (CategoryPlot) chart.getPlot();
categoryplot.setDomainGridlinesVisible(true);
categoryplot.setRangeCrosshairVisible(true);
categoryplot.setRangeCrosshairPaint(Color.blue);
NumberAxis numberaxis = (NumberAxis) categoryplot.getRangeAxis();
numberaxis.setStandardTickUnits(NumberAxis.createIntegerTickUnits());
BarRenderer barrenderer = (BarRenderer) categoryplot.getRenderer();
barrenderer.setBaseItemLabelFont(new Font("宋體", Font.PLAIN, 12));
barrenderer.setSeriesItemLabelFont(1, new Font("宋體", Font.PLAIN, 12));
CategoryAxis domainAxis = categoryplot.getDomainAxis();
/*------設(shè)置X軸坐標(biāo)上的文字-----------*/
domainAxis.setTickLabelFont(new Font("sans-serif", Font.PLAIN, 11));
/*------設(shè)置X軸的標(biāo)題文字------------*/
domainAxis.setLabelFont(new Font("宋體", Font.PLAIN, 12));
/*------設(shè)置Y軸坐標(biāo)上的文字-----------*/
numberaxis.setTickLabelFont(new Font("sans-serif", Font.PLAIN, 12));
/*------設(shè)置Y軸的標(biāo)題文字------------*/
numberaxis.setLabelFont(new Font("宋體", Font.PLAIN, 12));
/*------這句代碼解決了底部漢字亂碼的問題-----------*/
chart.getLegend().setItemFont(new Font("宋體", Font.PLAIN, 12));
// 生成圖片并輸出
ChartUtilities.writeChartAsJPEG(response.getOutputStream(), 1.0f,
chart, 500, 300, null);
} catch (Exception e) {
e.printStackTrace();
}
}
}
生成餅狀統(tǒng)計(jì)圖:
package com.xidian.servlet;
import java.awt.Color;
import java.awt.Font;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.jfree.chart.ChartUtilities;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.plot.PiePlot3D;
import org.jfree.chart.title.TextTitle;
import org.jfree.data.general.DefaultPieDataset;
/**
* 生成餅狀統(tǒng)計(jì)圖
* @說明
* @author cuisuqiang
* @version 1.0
* @since
*/
@SuppressWarnings("serial")
public class CakeServlet extends HttpServlet {
protected void service(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html");
// 默認(rèn)數(shù)據(jù)類型
DefaultPieDataset dataType = new DefaultPieDataset();
// 數(shù)據(jù)參數(shù) 內(nèi)容,數(shù)量
dataType.setValue("IE6", 156);
dataType.setValue("IE7", 230);
dataType.setValue("IE8", 45);
dataType.setValue("火狐", 640);
dataType.setValue("谷歌", 245);
try {
DefaultPieDataset data = dataType;
// 生成普通餅狀圖除掉 3D 即可
// 生產(chǎn)3D餅狀圖
PiePlot3D plot = new PiePlot3D(data);
JFreeChart chart = new JFreeChart(
"用戶使用的瀏覽器類型", // 圖形標(biāo)題
JFreeChart.DEFAULT_TITLE_FONT, // 標(biāo)題字體
plot, // 圖標(biāo)標(biāo)題對(duì)象
true // 是否顯示圖例
);
// 設(shè)置整個(gè)圖片的背景色
chart.setBackgroundPaint(Color.PINK);
// 設(shè)置圖片有邊框
chart.setBorderVisible(true);
// 配置字體
Font kfont = new Font("宋體", Font.PLAIN, 12); // 底部
Font titleFont = new Font("宋體", Font.BOLD, 25); // 圖片標(biāo)題
// 圖片標(biāo)題
chart.setTitle(new TextTitle(chart.getTitle().getText(), titleFont));
// 底部
chart.getLegend().setItemFont(kfont);
ChartUtilities.writeChartAsJPEG(response.getOutputStream(), 1.0f,
chart, 500, 300, null);
} catch (Exception e) {
e.printStackTrace();
}
}
}
柱狀分布統(tǒng)計(jì)圖:
package com.xidian.servlet;
import java.awt.Color;
import java.awt.Font;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartUtilities;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.axis.CategoryAxis;
import org.jfree.chart.axis.NumberAxis;
import org.jfree.chart.plot.CategoryPlot;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.chart.renderer.category.BarRenderer;
import org.jfree.chart.title.TextTitle;
import org.jfree.data.category.DefaultCategoryDataset;
/**
* 柱狀分布統(tǒng)計(jì)圖
* @說明
* @author cuisuqiang
* @version 1.0
* @since
*/
@SuppressWarnings("serial")
public class ParagraphsServlet extends HttpServlet {
protected void service(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html");
DefaultCategoryDataset dataTime = new DefaultCategoryDataset();
// 這是一組數(shù)據(jù)
dataTime.addValue(52, "0-6", "2010-1-1");
dataTime.addValue(86, "6-12", "2010-1-1");
dataTime.addValue(126, "12-18", "2010-1-1");
dataTime.addValue(42, "18-24", "2010-1-1");
// 這是一組數(shù)據(jù)
dataTime.addValue(452, "0-6", "2010-1-2");
dataTime.addValue(96, "6-12", "2010-1-2");
dataTime.addValue(254, "12-18", "2010-1-2");
dataTime.addValue(126, "18-24", "2010-1-2");
// 這是一組數(shù)據(jù)
dataTime.addValue(256, "0-6", "2010-1-3");
dataTime.addValue(86, "6-12", "2010-1-3");
dataTime.addValue(365, "12-18", "2010-1-3");
dataTime.addValue(24, "18-24", "2010-1-3");
try {
DefaultCategoryDataset data = dataTime;
// 使用ChartFactory創(chuàng)建3D柱狀圖,不想使用3D,直接使用createBarChart
JFreeChart chart = ChartFactory.createBarChart3D(
"網(wǎng)站時(shí)間段訪問量統(tǒng)計(jì)",
"時(shí)間",
"訪問量",
data,
PlotOrientation.VERTICAL,
true,
false,
false
);
// 設(shè)置整個(gè)圖片的背景色
chart.setBackgroundPaint(Color.PINK);
// 設(shè)置圖片有邊框
chart.setBorderVisible(true);
Font kfont = new Font("宋體", Font.PLAIN, 12); // 底部
Font titleFont = new Font("宋體", Font.BOLD, 25); // 圖片標(biāo)題
// 圖片標(biāo)題
chart.setTitle(new TextTitle(chart.getTitle().getText(), titleFont));
// 底部
chart.getLegend().setItemFont(kfont);
// 得到坐標(biāo)設(shè)置字體解決亂碼
CategoryPlot categoryplot = (CategoryPlot) chart.getPlot();
categoryplot.setDomainGridlinesVisible(true);
categoryplot.setRangeCrosshairVisible(true);
categoryplot.setRangeCrosshairPaint(Color.blue);
NumberAxis numberaxis = (NumberAxis) categoryplot.getRangeAxis();
numberaxis.setStandardTickUnits(NumberAxis.createIntegerTickUnits());
BarRenderer barrenderer = (BarRenderer) categoryplot.getRenderer();
barrenderer.setBaseItemLabelFont(new Font("宋體", Font.PLAIN, 12));
barrenderer.setSeriesItemLabelFont(1, new Font("宋體", Font.PLAIN, 12));
CategoryAxis domainAxis = categoryplot.getDomainAxis();
/*------設(shè)置X軸坐標(biāo)上的文字-----------*/
domainAxis.setTickLabelFont(new Font("sans-serif", Font.PLAIN, 11));
/*------設(shè)置X軸的標(biāo)題文字------------*/
domainAxis.setLabelFont(new Font("宋體", Font.PLAIN, 12));
/*------設(shè)置Y軸坐標(biāo)上的文字-----------*/
numberaxis.setTickLabelFont(new Font("sans-serif", Font.PLAIN, 12));
/*------設(shè)置Y軸的標(biāo)題文字------------*/
numberaxis.setLabelFont(new Font("宋體", Font.PLAIN, 12));
/*------這句代碼解決了底部漢字亂碼的問題-----------*/
chart.getLegend().setItemFont(new Font("宋體", Font.PLAIN, 12));
ChartUtilities.writeChartAsJPEG(response.getOutputStream(), 1.0f,
chart, 500, 300, null);
} catch (Exception es) {
es.printStackTrace();
}
}
}
JSP上使用IMG圖片來請(qǐng)求Servlet顯示圖片:
<%@ page language="java" pageEncoding="UTF-8"%> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <base href="<%=basePath%>" rel="external nofollow" > <title></title> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> <meta http-equiv="description" content="This is my page"> </head> <body> <center> <img src="LineServlet"> <img src="PillarServlet"> <img src="ParagraphsServlet"> <img src="CakeServlet"> </center> </body> </html>
WEB.xml配置:
<?xml version="1.0" encoding="UTF-8"?> <web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"> <filter> <filter-name>EncodingFilter</filter-name> <filter-class>org.filter.EncodingFilter</filter-class> </filter> <filter-mapping> <filter-name>EncodingFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <servlet> <servlet-name>LineServlet</servlet-name> <servlet-class>com.xidian.servlet.LineServlet</servlet-class> </servlet> <servlet> <servlet-name>PillarServlet</servlet-name> <servlet-class>com.xidian.servlet.PillarServlet</servlet-class> </servlet> <servlet> <servlet-name>ParagraphsServlet</servlet-name> <servlet-class> com.xidian.servlet.ParagraphsServlet </servlet-class> </servlet> <servlet> <servlet-name>CakeServlet</servlet-name> <servlet-class>com.xidian.servlet.CakeServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>LineServlet</servlet-name> <url-pattern>/LineServlet</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>PillarServlet</servlet-name> <url-pattern>/PillarServlet</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>ParagraphsServlet</servlet-name> <url-pattern>/ParagraphsServlet</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>CakeServlet</servlet-name> <url-pattern>/CakeServlet</url-pattern> </servlet-mapping> <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list> </web-app>
為了解決亂碼問題,我配置了一個(gè)過濾器:
package org.filter;
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
/**
* 處理亂碼
* @說明
* @author cuisuqiang
* @version 1.0
* @since
*/
public class EncodingFilter implements Filter {
public void destroy() {
}
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
request.setCharacterEncoding("gbk");
response.setCharacterEncoding("gbk");
chain.doFilter(request, response);
}
public void init(FilterConfig arg0) throws ServletException {
}
}
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
java輸入時(shí)如何通過回車(enter)來結(jié)束輸入
這篇文章主要介紹了java輸入時(shí)如何通過回車(enter)來結(jié)束輸入,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-05-05
Springboot整合quartz實(shí)現(xiàn)多個(gè)定時(shí)任務(wù)實(shí)例
這篇文章主要介紹了Springboot整合quartz實(shí)現(xiàn)多個(gè)定時(shí)任務(wù)代碼實(shí)例,Quartz?是一款功能強(qiáng)大的開源任務(wù)調(diào)度框架,幾乎可以集成到任何?Java?應(yīng)用程序中,Quartz?可用于創(chuàng)建簡(jiǎn)單或復(fù)雜的任務(wù)調(diào)度,用以執(zhí)行數(shù)以萬計(jì)的任務(wù),需要的朋友可以參考下2023-08-08
使用Java 實(shí)現(xiàn)一個(gè)“你畫手機(jī)猜”的小游戲
這篇文章主要介紹了使用Java 實(shí)現(xiàn)一個(gè)“你畫手機(jī)猜”的小游戲,本文通過示例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-09-09
java基礎(chǔ)之初始化ArrayList時(shí)直接賦值的4種方式總結(jié)
ArrayList是Java中的一個(gè)類,它是Java集合框架中的一部分,用于實(shí)現(xiàn)動(dòng)態(tài)數(shù)組,下面這篇文章主要給大家介紹了關(guān)于java基礎(chǔ)之初始化ArrayList時(shí)直接賦值的4種方式,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下2024-07-07
手把手教學(xué)Win10同時(shí)安裝兩個(gè)版本的JDK并隨時(shí)切換(JDK8和JDK11)
最近在學(xué)習(xí)JDK11的一些新特性,但是日常使用基本上都是基于JDK8,因此,需要在win環(huán)境下安裝多個(gè)版本的JDK,下面這篇文章主要給大家介紹了手把手教學(xué)Win10同時(shí)安裝兩個(gè)版本的JDK(JDK8和JDK11)并隨時(shí)切換的相關(guān)資料,需要的朋友可以參考下2023-03-03

