日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > HTML >内容正文

HTML

java内嵌浏览器的几种方式

發(fā)布時間:2023/12/20 HTML 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java内嵌浏览器的几种方式 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

最近遇到一個特殊的項目需求,就是需要在一個屏幕上打開多個窗口大小不同的瀏覽器、并且顯示不同的頁面。因為是需要瀏覽器無邊框的,在網(wǎng)上找了好多資料,發(fā)現(xiàn)前端好像很難實現(xiàn)。所以就打算采用java后臺內(nèi)嵌瀏覽器,然后實現(xiàn)無邊框的效果。

以下幾種就是筆者采用的幾種內(nèi)嵌瀏覽器方式:

1.Swing + JXBrowser

jxBrowser是收費的,我在網(wǎng)上找的破解版

  • jxbrowser-6.14.jar
  • jxbrowser-win32-6.14.jar

新建一個springboot項目,項目右鍵新建一個lib模板把上面兩個jar包拷貝進去

?

選中兩個jar包鼠標右鍵添加到library

?

創(chuàng)建main方法

import com.teamdev.jxbrowser.chromium.Browser; import com.teamdev.jxbrowser.chromium.swing.BrowserView;import javax.swing.*; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent;/****** @author tjw* @versuion 1.0* @date 2018/12/13 17:16*/ public class Test {public static void main(String[] args) {String url = "http://www.baidu.com";JFrame frame = new JFrame();// 谷歌內(nèi)核瀏覽器Browser browser = new Browser();BrowserView view = new BrowserView(browser);//禁用close功能 // frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//隱藏任務(wù)欄圖標 // frame.setType(JFrame.Type.UTILITY); // //不顯示標題欄,最大化,最小化,退出按鈕frame.setUndecorated(true);//尺寸 // frame.setSize(500, 500);//坐標frame.setLocation(0, 0);frame.add(view);//全屏顯示frame.setExtendedState(JFrame.MAXIMIZED_BOTH);// 是否顯示frame.setVisible(true);//是否在屏幕最上層顯示frame.setAlwaysOnTop(true);//加載地址browser.loadURL(url);// System.out.println(frame.getX()); // System.out.println(frame.getY()); // list.add(frame);frame.addWindowListener(new WindowAdapter() {// 窗口關(guān)閉時間監(jiān)聽@Overridepublic void windowClosing(WindowEvent e){System.out.println("窗口關(guān)閉...");}});} }

?

運行main方法顯示以下頁面

?

需要注意的是 jxbrowser實例只能存在一個,當再次運行main方法是將會報以下錯:

?

這是因為使用的破解版,如果需要更多的支持可以購買正版:https://jxbrowser.support.teamdev.com/support/home

?

2.使用DJNativeSwing,需要以下三個jar包

  • djnativeswing.jar
  • djnativeswing-swt.jar
  • org.eclipse.swt.win32.win32.x86_64-4.3.jar

代碼:

import java.awt.*; import java.awt.event.ItemEvent; import java.awt.event.ItemListener;import javax.swing.*;import chrriis.common.UIUtils; import chrriis.dj.nativeswing.swtimpl.NativeInterface; import chrriis.dj.nativeswing.swtimpl.components.JWebBrowser; import chrriis.dj.nativeswing.swtimpl.components.WebBrowserAdapter; import chrriis.dj.nativeswing.swtimpl.components.WebBrowserEvent;public class Browser2 extends JPanel {public Browser2() {super(new BorderLayout());JPanel webBrowserPanel = new JPanel(new BorderLayout());webBrowserPanel.setBorder(BorderFactory.createTitledBorder("Native Web Browser component"));final JWebBrowser webBrowser = new JWebBrowser();webBrowser.navigate("http://www.baidu.com");webBrowserPanel.add(webBrowser, BorderLayout.CENTER);add(webBrowserPanel, BorderLayout.CENTER);// Create an additional bar allowing to show/hide the menu bar of the web browser.JPanel buttonPanel = new JPanel(new FlowLayout(FlowLayout.CENTER, 4, 4));JCheckBox menuBarCheckBox = new JCheckBox("Menu Bar", webBrowser.isMenuBarVisible());menuBarCheckBox.addItemListener(new ItemListener() {public void itemStateChanged(ItemEvent e) {webBrowser.setMenuBarVisible(e.getStateChange() == ItemEvent.SELECTED);}});buttonPanel.add(menuBarCheckBox);add(buttonPanel, BorderLayout.SOUTH);}/* Standard main method to try that test as a standalone application. */public static void main(String[] args) {UIUtils.setPreferredLookAndFeel();NativeInterface.open();SwingUtilities.invokeLater(new Runnable() {public void run() {JFrame frame = new JFrame("DJ Native Swing Test");frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);frame.getContentPane().add(new Browser2(), BorderLayout.CENTER);//不顯示標題欄,最大化,最小化,退出按鈕frame.setUndecorated(true);frame.setSize(800, 600);frame.setLocationByPlatform(true);frame.setVisible(true);}});NativeInterface.runEventPump();} }

運行項目:

?

3.使用SWT (org.eclipse.swt.SWT相關(guān)依賴)需要以下jar包

  • org.eclipse.swt.win32.win32.x86_64-4.3.jar

代碼:

import org.eclipse.swt.SWT; import org.eclipse.swt.browser.Browser; import org.eclipse.swt.widgets.*;/****** @author tjw* @versuion 1.0* @date 2018/12/13 17:59*/ public class SWTtest {public static void main(String args[]){Display display=new Display();Shell shell=new Shell(display);shell.setText("SWT Browser Test");shell.setSize(800,600);final Text text=new Text(shell,SWT.BORDER);text.setBounds(110,5,560,25);Button button=new Button(shell,SWT.BORDER);button.setBounds(680,5,100,25);button.setText("go");Label label=new Label(shell,SWT.LEFT);label.setText("輸入網(wǎng)址 :");label.setBounds(5, 5, 100, 25);final Browser browser=new Browser(shell,SWT.FILL);browser.setBounds(5,30,780,560);button.addListener(SWT.Selection, new Listener(){public void handleEvent(Event event){String input=text.getText().trim();if(input.length()==0)return;if(!input.startsWith("http://")){input="http://"+input;text.setText(input);}browser.setUrl(input);}});shell.open();while (!shell.isDisposed()) {if (!display.readAndDispatch())display.sleep();}display.dispose();} }

?

?

?

以上三種就是java內(nèi)嵌瀏覽器的實現(xiàn)方式,三種對帶有視頻的網(wǎng)頁支持不是很友好,播放不出視頻,不過第一種jxbrowser購買了許可 即可正常使用視頻播放功能,他對前端的頁面渲染都相對較穩(wěn)定,其他兩種對有些頁面可能渲染不出來。筆者項目前端用的是vue,所以用的是第一種內(nèi)嵌瀏覽器方式。項目源碼已上傳到github,項目中的jar包都在項目的lib目錄里,歡迎朋友們下載。

源碼地址:https://github.com/tanjiawei1199/javaBrowser

?

?

?

?

總結(jié)

以上是生活随笔為你收集整理的java内嵌浏览器的几种方式的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。