精华内容
下载资源
问答
  • 幸好,electron是如此神奇,它提供了一种能让你将任何前端代码的网站页面封装成桌面应用。无论是vue,react 还是 angular等现有的框架都能实现。 基础 学习该内容需要基本的 javascript 语法基础,以及 node.js 基础...

    需求缘由

    开发了很久的网页项目,领导突然想变成桌面应用,又要重写代码?no,no,no。不可能的。重写代码吃力不讨好,浪费时间,浪费精力。那么我们该怎么办呢?
    幸好,electron是如此神奇,它提供了一种能让你将任何前端代码的网站页面封装成桌面应用。无论是vue,react 还是 angular等现有的框架都能实现。

    基础

    学习该内容需要基本的 javascript 语法基础,以及 node.js 基础。

    步骤

    1,安装electron依赖包(局部安装,只安装开发依赖)
    npm install electron --save-dev

    2,package.json 同级位置创建文件 electron.js

    electron.js 文件内容:

    // 主进程
    // Modules to control application life and create native browser window
    const {app, protocol, Menu, BrowserWindow } = require('electron')
    const path = require('path')
    const { readFile } = require ('fs')
    const { URL } =  require ('url')
    
    // 处理文件打包之后的访问路径为 app的相对路径,
    function createProtocol(scheme) {
      protocol.registerBufferProtocol(
        scheme,
        (request, respond) => {
          let pathName = new URL(request.url).pathname
          pathName = decodeURI(pathName) // Needed in case URL contains spaces
    
          readFile(path.join(__dirname, pathName), (error, data) => {
            if (error) {
              console.error(`Failed to read ${pathName} on ${scheme} protocol`, error)
            }
            const extension = path.extname(pathName).toLowerCase()
            let mimeType = ''
    
            if (extension === '.js') {
              mimeType = 'text/javascript'
            } else if (extension === '.html') {
              mimeType = 'text/html'
            } else if (extension === '.css') {
              mimeType = 'text/css'
            } else if (extension === '.svg' || extension === '.svgz') {
              mimeType = 'image/svg+xml'
            } else if (extension === '.json') {
              mimeType = 'application/json'
            }
            respond({ mimeType, data })
          })
        },
        error => {
          if (error) {
            console.error(`Failed to register ${scheme} protocol`, error)
          }
        }
      )
    }
    // 防止 localStorage 不可访问
    protocol.registerSchemesAsPrivileged([{
      scheme: 'app',
      privileges: {
        secure: true,
        standard: true
      }
    }])
    
    // Keep a global reference of the window object, if you don't, the window will
    // be closed automatically when the JavaScript object is garbage collected.
    let mainWindow
    let template = []  //顶部菜单模板
    function createWindow () {
      // Create the browser window. 桌面应用的初始宽度、高度
      mainWindow = new BrowserWindow({
        width: 1600,
        height: 1000,
        
      })
    
      // and load the index.html of the app.
      createProtocol('app')  // 创建一个应用,访问路径的初始化
      mainWindow.loadURL('app://./index.html')  // 入口文件, 窗口指向 index.html 文件作为首页,这里可以是vue,react,angular 的打包之后的dist目录内部的index.html文件。
    
      //   Open the DevTools.
      //   mainWindow.webContents.openDevTools()
      let menu = Menu.buildFromTemplate(template)
      Menu.setApplicationMenu(menu) // 重新设置桌面应用的顶部菜单
      // Emitted when the window is closed.
      mainWindow.on('closed', function () {
        // Dereference the window object, usually you would store windows
        // in an array if your app supports multi windows, this is the time
        // when you should delete the corresponding element.
        mainWindow = null
      })
    }
    
    // This method will be called when Electron has finished
    // initialization and is ready to create browser windows.
    // Some APIs can only be used after this event occurs.
    app.on('ready', createWindow)
    
    // Quit when all windows are closed.
    app.on('window-all-closed', function () {
      // On macOS it is common for applications and their menu bar
      // to stay active until the user quits explicitly with Cmd + Q
      if (process.platform !== 'darwin') app.quit()
    })
    
    app.on('activate', function () {
      // On macOS it's common to re-create a window in the app when the
      // dock icon is clicked and there are no other windows open.
      if (mainWindow === null) createWindow()
    })
    
    // In this file you can include the rest of your app's specific main process
    // code. You can also put them in separate files and require them here.
    

    3,在package.json文件中增加指令,用来启动Electron桌面应用

    “scripts”: {
    “dev”: “vue-cli-service serve”,
    “build”: “vue-cli-service build”,
    “electron-dev”: “vue-cli-service build && electron electron.js”, ------新增
    “electron-build”: “electron-packager ./dist/ --arch=x64 --icon=logo.ico --overwrite” ------ 新增,打包成.exe 文件使用
    },
    备注:注意添加文件 logo.ico 到 package.json 的同级位置。
    这里需要灵活变化:
    1,vue-cli-service build 是打包成dist文件的命令,具体项目的打包命令具体替换,本项目使用了vue-cli脚手架,故命令如此。
    2,./dist/ 是指生成的桌面应用是在dist文件内部的基础上打包的,因此要看你的index.html文件在哪里,一般build之后都有一个index.html文件。

    4,在关于webpack的基础配置文件里的module.exports 内部添加一条数据 publicPath: ‘./’,
    这里是为了让build之后的文件引用相对路径。

    5,将所有的api 请求的前面都加上对应的网站域名。
    这里最好有一个公用的函数,一般都是在axios 的 baseURL参数里面。

    6,先执行 npm run electron_dev,可以运行开发中的electron桌面应用。

    接下来就是怎么打包出桌面应用了,这里用的是打包工具electron-packager ,当然也可以使用别的工具。

    7,安装 electron-packager
    npm install electron-packager --save-dev

    8,复制 package.json 到dist文件里,新增一条数据 “main”: “electron.js”,

    9,复制 electron.js 到dist文件里,

    10,执行 npm run electron_build ,便会生成安装包文件 vue-antd-pro-win32-x64 , 打开里面的 .exe 文件即可

    总结

    总体来说,代码不多,步骤也不多,但具体项目又可能遇到各种不可预测的问题,仍然需要具体问题具体分析。

    参考内容

    https://www.cnblogs.com/liulun/p/12984456.html

    展开全文
  • 幸好,electron是如此神奇,它提供了一种能让你将任何前端代码的网站页面封装成桌面应用。无论是vue,react 还是 angular等现有的框架都能实现。 基础 学习该内容需要基本的 javascript 语法基础,以及 node.js 基础...

    简介
    需求缘由
    基础
    步骤
    总结
    参考内容
    需求缘由
    开发了很久的网页项目,领导突然想变成桌面应用,又要重写代码?no,no,no。不可能的。重写代码吃力不讨好,浪费时间,浪费精力。那么我们该怎么办呢?
    幸好,electron是如此神奇,它提供了一种能让你将任何前端代码的网站页面封装成桌面应用。无论是vue,react 还是 angular等现有的框架都能实现。

    基础
    学习该内容需要基本的 javascript 语法基础,以及 node.js 基础。

    步骤
    1,安装electron依赖包(局部安装,只安装开发依赖)
    npm install electron --save-dev

    2,package.json 同级位置创建文件 electron.js

    electron.js 文件内容:

    // 主进程
    // Modules to control application life and create native browser window
    const {app, protocol, Menu, BrowserWindow } = require(‘electron’)
    const path = require(‘path’)
    const { readFile } = require (‘fs’)
    const { URL } = require (‘url’)

    // 处理文件打包之后的访问路径为 app的相对路径,
    function createProtocol(scheme) {
    protocol.registerBufferProtocol(
    scheme,
    (request, respond) => {
    let pathName = new URL(request.url).pathname
    pathName = decodeURI(pathName) // Needed in case URL contains spaces

      readFile(path.join(__dirname, pathName), (error, data) => {
        if (error) {
          console.error(`Failed to read ${pathName} on ${scheme} protocol`, error)
        }
        const extension = path.extname(pathName).toLowerCase()
        let mimeType = ''
    
        if (extension === '.js') {
          mimeType = 'text/javascript'
        } else if (extension === '.html') {
          mimeType = 'text/html'
        } else if (extension === '.css') {
          mimeType = 'text/css'
        } else if (extension === '.svg' || extension === '.svgz') {
          mimeType = 'image/svg+xml'
        } else if (extension === '.json') {
          mimeType = 'application/json'
        }
        respond({ mimeType, data })
      })
    },
    error => {
      if (error) {
        console.error(`Failed to register ${scheme} protocol`, error)
      }
    }
    

    )
    }
    // 防止 localStorage 不可访问
    protocol.registerSchemesAsPrivileged([{
    scheme: ‘app’,
    privileges: {
    secure: true,
    standard: true
    }
    }])

    // Keep a global reference of the window object, if you don’t, the window will
    // be closed automatically when the JavaScript object is garbage collected.
    let mainWindow
    let template = [] //顶部菜单模板
    function createWindow () {
    // Create the browser window. 桌面应用的初始宽度、高度
    mainWindow = new BrowserWindow({
    width: 1600,
    height: 1000,

    })

    // and load the index.html of the app.
    createProtocol(‘app’) // 创建一个应用,访问路径的初始化
    mainWindow.loadURL(‘app://./index.html’) // 入口文件, 窗口指向 index.html 文件作为首页,这里可以是vue,react,angular 的打包之后的dist目录内部的index.html文件。

    // Open the DevTools.
    // mainWindow.webContents.openDevTools()
    let menu = Menu.buildFromTemplate(template)
    Menu.setApplicationMenu(menu) // 重新设置桌面应用的顶部菜单
    // Emitted when the window is closed.
    mainWindow.on(‘closed’, function () {
    // Dereference the window object, usually you would store windows
    // in an array if your app supports multi windows, this is the time
    // when you should delete the corresponding element.
    mainWindow = null
    })
    }

    // This method will be called when Electron has finished
    // initialization and is ready to create browser windows.
    // Some APIs can only be used after this event occurs.
    app.on(‘ready’, createWindow)

    // Quit when all windows are closed.
    app.on(‘window-all-closed’, function () {
    // On macOS it is common for applications and their menu bar
    // to stay active until the user quits explicitly with Cmd + Q
    if (process.platform !== ‘darwin’) app.quit()
    })

    app.on(‘activate’, function () {
    // On macOS it’s common to re-create a window in the app when the
    // dock icon is clicked and there are no other windows open.
    if (mainWindow === null) createWindow()
    })

    // In this file you can include the rest of your app’s specific main process
    // code. You can also put them in separate files and require them here.

    3,在package.json文件中增加指令,用来启动Electron桌面应用

    “scripts”: {
    “dev”: “vue-cli-service serve”,
    “build”: “vue-cli-service build”,
    “electron-dev”: “vue-cli-service build && electron electron.js”, ------新增
    “electron-build”: “electron-packager ./dist/ --arch=x64 --icon=logo.ico --overwrite” ------ 新增,打包成.exe 文件使用
    },
    备注:注意添加文件 logo.ico 到 package.json 的同级位置。
    这里需要灵活变化:
    1,vue-cli-service build 是打包成dist文件的命令,具体项目的打包命令具体替换,本项目使用了vue-cli脚手架,故命令如此。
    2,./dist/ 是指生成的桌面应用是在dist文件内部的基础上打包的,因此要看你的index.html文件在哪里,一般build之后都有一个index.html文件。

    4,在关于webpack的基础配置文件里的module.exports 内部添加一条数据 publicPath: ‘./’,
    这里是为了让build之后的文件引用相对路径。

    5,将所有的api 请求的前面都加上对应的网站域名。
    这里最好有一个公用的函数,一般都是在axios 的 baseURL参数里面。

    6,先执行 npm run electron_dev,可以运行开发中的electron桌面应用。

    接下来就是怎么打包出桌面应用了,这里用的是打包工具electron-packager ,当然也可以使用别的工具。

    7,安装 electron-packager
    npm install electron-packager --save-dev

    8,复制 package.json 到dist文件里,新增一条数据 “main”: “electron.js”,

    9,复制 electron.js 到dist文件里,

    10,执行 npm run electron_build ,便会生成安装包文件 vue-antd-pro-win32-x64 , 打开里面的 .exe 文件即可

    总结
    总体来说,代码不多,步骤也不多,但具体项目又可能遇到各种不可预测的问题,仍然需要具体问题具体分析。

    参考内容
    https://www.cnblogs.com/liulun/p/12984456.html

    原文链接:https://blog.csdn.net/Aglaia_web/article/details/107543945?utm_medium=distribute.pc_feed.none-task-blog-cf-3.nonecase&depth_1-utm_source=distribute.pc_feed.none-task-blog-cf-3.nonecase&request_id=5f209e1ef769fa6e5f5d46f5

    展开全文
  • 上网冲浪发现一个有、意思的工具, 可以把web页面打包运行在桌面应用, 并支持win / mac / linux等平台, 记一下使用过程, 有(xiang)需(mo)要(yu)的大佬可以玩玩~对了, 需要 nodejs 环境支持哦~1. 安装 npm install...

    9ba588e0df0ca90785d1e8787f2d217b.png

    上网冲浪发现一个有、意思的工具, 可以把web页面打包成运行在桌面的应用, 并支持win / mac / linux等平台, 记一下使用过程, 有(xiang)需(mo)要(yu)的大佬可以玩玩~

    对了, 需要 nodejs 环境支持哦~

    1. 安装

     npm install nativefier -g

    2. 使用

    在 nativefier 后加上需要转换的网站地址, 比如:

     nativefier "https://www.zhihu.com/"

    第一次打包需要下载 Eletron 框架, 很慢, 要有耐心......

    运行完毕, 会生成一个 100 多 m 的应用, 路径一般为C:Users用户名... 如图(用户名打码了, 就是你 PC 用户名):

    c48d46f8f28b18d207a64baa43e104b1.png

    3. Tips

    还有一些另外的细节:

    1. 图标和命名

    图标和名字会自动抓图网站的名字和 logo.

    如果网站名字是中文的话, 抓名字就翻车了, 变成了--

    而且, 抓的好像不是网页的 title , 比如 Github 的名字就是很中二的 'The worlds leading software development platform GitHub-win32-x64' , 应该是 Github 某句SEO用的代码吧

    知乎的名字就翻车了 '---win32-x64'

    2. 自定义图标和名字

    名字可以生成完以后直接F2重命名, 如果想XX以下就直接创建时加上 --name 参数, 图标同理, 可以一起用:

     nativefier --name "app名字" "https://www.zhihu.com"  // 自定义名字
     navivefier --name "app图标路径" "https://www.zhihu.com"  // 自定义图标

    注意: 图标要用ico格式(网上有工具可以转), 其他格式没试, 哪位大佬没事儿可以试试

    改图标还可以直接去 app名字resourcesapp 里替换 icon.ico 文件

    3. 官方的 API 文档

    nativefier还提供了很多可选参数, 有需求请阅读官方API 文档

    做完后

    完成后的目录

    b7d2b68c1883b41f4c31fd10da3d72ab.png

    打开后的样子:

    d764b89f79071388e0fb7b1091a0e7d1.png

    其实就是一个网页, 但是相比在浏览器里会少了地址栏, 标签栏等等杂七杂八的东西, 看着舒服一些, 还能 Alt+tab 切窗口, 摸起鱼来更舒服是不...

    展开全文
  • 也是因为clojurescript编译后用electron打包成桌面应用安装程序这篇没有解决问题,所以考虑直接用electron打个chrome浏览器进去,然后制定访问的网页,代替本地资源。话说前一篇之所以没有成功,也不是完全解决不了...

    也是因为clojurescript编译后用electron打包成桌面应用安装程序这篇没有解决问题,所以考虑直接用electron打个chrome浏览器进去,然后制定访问的网页,代替本地资源。

    话说前一篇之所以没有成功,也不是完全解决不了,而是因为不想折腾了,解决的话思路应该有两条:

    figwheel不支持npm程序,换成shadow-cljs之类的编译器

    增加electron依赖,在应用层触发更新检查

    这篇说明一下直接运行URL的配置和注意事项。

    1. 下载electron的压缩包

    下载解压,内部目录大概如此

    electron

    主要运行时文件就是resources/default_app.asar

    2. 安装asar包解压缩命令

    yum install -g asar

    两个命令(asar --help):

    asar pack app default_app.asar

    asar extract|e

    其他命令自行百度。

    3.核心文件

    核心文件就是打包成resources/default_app.asar所需要的文件。在electron的项目目录下,创建一个文件夹app ,里面新建两个文件。

    3.1 main.js

    // app 模块是为了控制整个应用的生命周期设计的。

    // BrowserWindow 类让你有创建一个浏览器窗口的权力。

    const {app, BrowserWindow, Menu, ipcMain} = require('electron');

    const nativeImage = require('electron').nativeImage;

    var overlay = nativeImage.createFromPath('icon.png');

    const mainWindowURL = 'https://www.baidu.com';

    let mainWindow;

    //api:https://wizardforcel.gitbooks.io/electron-doc/content/api/browser-window.html

    function createWindow () {

    console.log("createWindow......");

    mainWindow = new BrowserWindow({

    // fullscreen: true,

    maximizable: true, //支持最大化

    show: false, //为了让初始化窗口显示无闪烁,先关闭显示,等待加载完成后再显示。

    // icon: "https://medical.3vyd.com/alk/prod/pc/icon/icon.ico"

    })

    // Emitted when the window is closed.

    mainWindow.on('closed', function () {

    console.log("closed......");

    mainWindow = null;

    })

    // mainWindow.once('ready-to-show', () => { //开启这个以后点击了图片虽然没有白屏,但是会感觉不到点了没点

    mainWindow.maximize(); //打开时最大化打开,不是全屏,保留状态栏

    // })

    // mainWindow.setOverlayIcon(overlay, "医敏")

    mainWindow.setTitle("过敏性疾病高端用户平台");

    mainWindow.setAutoHideMenuBar(true);//自动隐藏菜单

    mainWindow.loadURL(mainWindowURL);

    // app.commandLine.appendSwitch("--disable-http-cache") 禁用缓存

    // mainWindow.webContents.openDevTools({mode:'bottom'});

    mainWindow.show();

    }

    app.on('ready', function() {

    console.log("ready......");

    createWindow();

    });

    // Quit when all windows are closed.

    app.on('window-all-closed', function () {

    // On OS X it is common for applications and their menu bar

    // to stay active until the user quits explicitly with Cmd + Q

    if (process.platform !== 'darwin') {

    app.quit();

    }

    })

    3.2 package.json

    {

    "name": "electron",

    "productName": "Electron",

    "main": "main.js"

    }

    注意:productName的值千万不需要改。

    4. 打包

    在electron/resources目录下执行:

    rm -rf default_app.asar

    asar pack app default_app.asar

    也就是用自己心大的asar文件替换原来旧的。

    5. 测试

    在windows上访问该exe应用,一般应该没有问题打开百度的。

    问题:

    electron缓存问题

    浏览器访问的资源都会被缓存,几种方式避免缓存。

    在css或者js等资源后面加版本号

    清除本地cache

    windows上位置:

    The Electron stores it's cache in these folders:

    Windows:

    C:\Users\AppData\Roaming\Cache

    Linux:

    /home//.config//Cache

    OS X:

    /Users//Library/Application Support//Cache

    升级问题

    因为直接访问url,所以不存在上一篇说的版本更新问题。

    展开全文
  • vc++ 应用源码包_1

    热门讨论 2012-09-15 14:22:12
    DOM应用---遍历网页中的元素 dshowplayer 媒体播放器的实现,实现了VMR7、VMR9、EVR方式。 DSoundManager 实现了声音管理。 Excel文件的导入和导出操作 主要的实现在CMyExcel类中。 expclass_src dll库的演示。 ...
  • vc++ 应用源码包_2

    热门讨论 2012-09-15 14:27:40
    DOM应用---遍历网页中的元素 dshowplayer 媒体播放器的实现,实现了VMR7、VMR9、EVR方式。 DSoundManager 实现了声音管理。 Excel文件的导入和导出操作 主要的实现在CMyExcel类中。 expclass_src dll库的演示。 ...
  • vc++ 应用源码包_6

    热门讨论 2012-09-15 14:59:46
    DOM应用---遍历网页中的元素 dshowplayer 媒体播放器的实现,实现了VMR7、VMR9、EVR方式。 DSoundManager 实现了声音管理。 Excel文件的导入和导出操作 主要的实现在CMyExcel类中。 expclass_src dll库的演示。 ...
  • vc++ 应用源码包_5

    热门讨论 2012-09-15 14:45:16
    DOM应用---遍历网页中的元素 dshowplayer 媒体播放器的实现,实现了VMR7、VMR9、EVR方式。 DSoundManager 实现了声音管理。 Excel文件的导入和导出操作 主要的实现在CMyExcel类中。 expclass_src dll库的演示。 ...
  • vc++ 应用源码包_4

    热门讨论 2012-09-15 14:38:35
    DOM应用---遍历网页中的元素 dshowplayer 媒体播放器的实现,实现了VMR7、VMR9、EVR方式。 DSoundManager 实现了声音管理。 Excel文件的导入和导出操作 主要的实现在CMyExcel类中。 expclass_src dll库的演示。 ...
  • vc++ 应用源码包_3

    热门讨论 2012-09-15 14:33:15
    DOM应用---遍历网页中的元素 dshowplayer 媒体播放器的实现,实现了VMR7、VMR9、EVR方式。 DSoundManager 实现了声音管理。 Excel文件的导入和导出操作 主要的实现在CMyExcel类中。 expclass_src dll库的演示。 ...
  • |--Intent启动应用apk安装 |--Intent常用功能 |--IO将输入流转字节 |--Json读js资源文件 |--layout布局样式之style配置 |--listview 页面 图片加文字 |--ListView之CursorAdapter异步查询框架之短信 |--ListView...
  • java开源包1

    千次下载 热门讨论 2013-06-28 09:14:34
    J2C 将 Java 代码转 C++ 代码,这是源码级别的转换,输出的 C++ 代码是有效的代码。 OSGi 分布式通讯组件 R-OSGi R-OSGi 是一套适用于任意满足 OSGi 架构的分布式通讯组件。它以 jar 的形式发布,部署容易,使用...
  • java开源包12

    热门讨论 2013-06-28 10:14:45
    J2C 将 Java 代码转 C++ 代码,这是源码级别的转换,输出的 C++ 代码是有效的代码。 OSGi 分布式通讯组件 R-OSGi R-OSGi 是一套适用于任意满足 OSGi 架构的分布式通讯组件。它以 jar 的形式发布,部署容易,使用...
  • Java资源包01

    2016-08-31 09:16:25
    J2C 将 Java 代码转 C++ 代码,这是源码级别的转换,输出的 C++ 代码是有效的代码。 OSGi 分布式通讯组件 R-OSGi R-OSGi 是一套适用于任意满足 OSGi 架构的分布式通讯组件。它以 jar 的形式发布,部署容易,使用...
  • java开源包101

    2016-07-13 10:11:08
    J2C 将 Java 代码转 C++ 代码,这是源码级别的转换,输出的 C++ 代码是有效的代码。 OSGi 分布式通讯组件 R-OSGi R-OSGi 是一套适用于任意满足 OSGi 架构的分布式通讯组件。它以 jar 的形式发布,部署容易,使用...
  • java开源包11

    热门讨论 2013-06-28 10:10:38
    J2C 将 Java 代码转 C++ 代码,这是源码级别的转换,输出的 C++ 代码是有效的代码。 OSGi 分布式通讯组件 R-OSGi R-OSGi 是一套适用于任意满足 OSGi 架构的分布式通讯组件。它以 jar 的形式发布,部署容易,使用...
  • java开源包2

    热门讨论 2013-06-28 09:17:39
    J2C 将 Java 代码转 C++ 代码,这是源码级别的转换,输出的 C++ 代码是有效的代码。 OSGi 分布式通讯组件 R-OSGi R-OSGi 是一套适用于任意满足 OSGi 架构的分布式通讯组件。它以 jar 的形式发布,部署容易,使用...
  • java开源包3

    热门讨论 2013-06-28 09:20:52
    J2C 将 Java 代码转 C++ 代码,这是源码级别的转换,输出的 C++ 代码是有效的代码。 OSGi 分布式通讯组件 R-OSGi R-OSGi 是一套适用于任意满足 OSGi 架构的分布式通讯组件。它以 jar 的形式发布,部署容易,使用...
  • java开源包6

    热门讨论 2013-06-28 09:48:32
    J2C 将 Java 代码转 C++ 代码,这是源码级别的转换,输出的 C++ 代码是有效的代码。 OSGi 分布式通讯组件 R-OSGi R-OSGi 是一套适用于任意满足 OSGi 架构的分布式通讯组件。它以 jar 的形式发布,部署容易,使用...
  • java开源包5

    热门讨论 2013-06-28 09:38:46
    J2C 将 Java 代码转 C++ 代码,这是源码级别的转换,输出的 C++ 代码是有效的代码。 OSGi 分布式通讯组件 R-OSGi R-OSGi 是一套适用于任意满足 OSGi 架构的分布式通讯组件。它以 jar 的形式发布,部署容易,使用...
  • java开源包10

    热门讨论 2013-06-28 10:06:40
    J2C 将 Java 代码转 C++ 代码,这是源码级别的转换,输出的 C++ 代码是有效的代码。 OSGi 分布式通讯组件 R-OSGi R-OSGi 是一套适用于任意满足 OSGi 架构的分布式通讯组件。它以 jar 的形式发布,部署容易,使用...
  • java开源包4

    热门讨论 2013-06-28 09:26:54
    J2C 将 Java 代码转 C++ 代码,这是源码级别的转换,输出的 C++ 代码是有效的代码。 OSGi 分布式通讯组件 R-OSGi R-OSGi 是一套适用于任意满足 OSGi 架构的分布式通讯组件。它以 jar 的形式发布,部署容易,使用...
  • java开源包8

    热门讨论 2013-06-28 09:55:26
    J2C 将 Java 代码转 C++ 代码,这是源码级别的转换,输出的 C++ 代码是有效的代码。 OSGi 分布式通讯组件 R-OSGi R-OSGi 是一套适用于任意满足 OSGi 架构的分布式通讯组件。它以 jar 的形式发布,部署容易,使用...
  • java开源包9

    热门讨论 2013-06-28 09:58:55
    J2C 将 Java 代码转 C++ 代码,这是源码级别的转换,输出的 C++ 代码是有效的代码。 OSGi 分布式通讯组件 R-OSGi R-OSGi 是一套适用于任意满足 OSGi 架构的分布式通讯组件。它以 jar 的形式发布,部署容易,使用...
  • java开源包7

    热门讨论 2013-06-28 09:52:16
    J2C 将 Java 代码转 C++ 代码,这是源码级别的转换,输出的 C++ 代码是有效的代码。 OSGi 分布式通讯组件 R-OSGi R-OSGi 是一套适用于任意满足 OSGi 架构的分布式通讯组件。它以 jar 的形式发布,部署容易,使用...
  •  Java编写的网页版魔方游戏,编译后生成.class文件,然后用HTML去调用,不过运行时候需要你的浏览器安装有运行Class的插件。Java源代码实现部分,比较有意思,也具参考性。像坐标控制、旋转矩阵、定时器、生成图像...
  • JAVA上百实例源码以及开源项目

    千次下载 热门讨论 2016-01-03 17:37:40
     Java编写的网页版魔方游戏,编译后生成.class文件,然后用HTML去调用,不过运行时候需要你的浏览器安装有运行Class的插件。Java源代码实现部分,比较有意思,也具参考性。像坐标控制、旋转矩阵、定时器、生成图像...

空空如也

空空如也

1 2 3
收藏数 51
精华内容 20
关键字:

网页封装成桌面安装应用