精华内容
下载资源
问答
  • electron实现桌面应用

    千次阅读 2020-08-21 16:05:24
    Electron 可以让你使用纯 JavaScript 调用丰富的原生 APIs 来创造桌面应用。你可以把它看作是专注于桌面应用 在PC端混合app开发中,nwjs和electron都是可选的方案,它们都是基于Chromium和Node的结合体, 而electron...

    1. 简介

    • 官网
    • Electron是由GitHub开发,使用 JavaScript,HTML 和 CSS 构建跨平台的桌面应用程序
    • Electron 可以让你使用纯 JavaScript 调用丰富的原生 APIs 来创造桌面应用。你可以把它看作是专注于桌面应用
    • 在PC端混合app开发中,nwjs和electron都是可选的方案,它们都是基于Chromium和Node的结合体, 而electron相对而言是更好的选择方案,它的社区相对比较活跃,bug比较少,文档先对利索简洁。
    • electron 相对来说比 nw.js 靠谱。有一堆成功的案例:Atom 编辑器 2. Slack (那个独角兽公司)3. Visual Studio Code 4. WordPress 等等。。
    • Node. js 的所有 内置模块 都在Electron中可用, 第三方 node 模块中也完全支持 (包括 原生模块 )。
    • Electron 还为开发原生桌面应用程序提供了一些额外的内置模块。 某些模块仅在主进程中可用, 有些仅在渲染进程 (web 页) 中可用, 而有些在这两个进程中都可以使用。

    2. 五分钟快速上手

    2.1 安装electron

    • npm init
    • cnpm I electron –S
    • npx electron

    2.2 配置为入口文件

    {
      "name": "electron-demo",
      "version": "1.0.0",
      "description": "",
      "main": "main.js",
      "scripts": {
        "test": "echo \"Error: no test specified\" && exit 1",
        "start": "electron ."
      },
      "author": "",
      "license": "ISC",
      "dependencies": {
        "electron": "^8.3.0"
      }
    }
    

    2.3 创建main.js文件

    const electron = require('electron')
    
    const app = electron.app 
    
    app.on('ready', ()=>{
      new electron.BrowserWindow({
        width: 800,
        height: 300
      })
    })
    

    2.4创建窗口

    app.on('ready', ()=>{
      const mainWindow = new BrowserWindow({
        width: 800,
        height: 500
      })
    
      mainWindow.loadFile('./index.html')
    })
    

    3. 主进程和渲染进程

    Electron 运行 package.jsonmain 脚本的进程被称为主进程。 在主进程中运行的脚本通过创建web页面来展示用户界面。 一个 Electron 应用总是有且只有一个主进程。

    由于 Electron 使用了 Chromium 来展示 web 页面,所以 Chromium 的多进程架构也被使用到。 每个 Electron 中的 web 页面运行在它的叫渲染进程的进程中。

    在普通的浏览器中,web页面无法访问操作系统的原生资源。 然而 Electron 的用户在 Node.js 的 API 支持下可以在页面中和操作系统进行一些底层交互。

    ctrl+shift+i打开渲染进程调试

    app.on('ready', ()=>{
      const mainWindow = new BrowserWindow({
        width: 800,
        height: 500
      })
    
      mainWindow.loadFile('./index.html')
    
      const mainWindow2 = new BrowserWindow({
        width: 800,
        height: 500
      })
    
      mainWindow2.loadFile('./index2.html')
    })
    

    4. 自定义原生菜单

    4.1 自定义菜单

    const electron = require('electron')
    
    const { app, Menu } = electron
    const template = [
      {
        label: '文件',
        submenu: [
          {
            label: '新建窗口'
          }
        ]
      },
      {
        label: '编辑',
        submenu: [
          {
            label: '新建窗口'
          }
        ]
      }
    ]
    const menu = Menu.buildFromTemplate(template)
    
    Menu.setApplicationMenu(menu)
    

    4.2 给菜单定义点击事件

    1、点击打开新窗口

    submenu: [
      {
        label: '新建窗口',
        click: ()=>{
          const newMainWindow = new BrowserWindow({
            width: 300,
            height: 300
          })
          newMainWindow.loadFile('./new.html')
        }
      }
    ]
    

    2、点击打开浏览器

    const { BrowserWindow, Menu, shell } = require('electron')
    const template = [
      {
        label: '文件',
        submenu: [
          {
            label: '文件1',
            click () {
              // 点击打开新窗口
              const mainWindow2 = new BrowserWindow({
                width: 600,
                height: 600
              })
            
              mainWindow2.loadFile('./index.html')
            }
          }
        ]
      },
      {
        label: 'csdn',
        click () {
          // 点击打开浏览器
          shell.openExternal('https://www.csdn.net/')
        }
      }
    ]
    

    4.3 抽离菜单定义

    const { BrowserWindow, Menu} = require('electron')
    const template = [
      {
        label: '文件',
        submenu: [
          {
            label: '新建窗口',
            click: ()=>{
              const newMainWindow = new BrowserWindow({
                width: 300,
                height: 300
              })
              newMainWindow.loadFile('./new.html')
            }
          }
        ]
      },
      {
        label: '编辑',
        submenu: [
          {
            label: '新建窗口'
          }
        ]
      }
    ]
    const menu = Menu.buildFromTemplate(template)
    
    Menu.setApplicationMenu(menu)
    
    require('./menu')
    

    打开调式

    mainWindow.webContents.openDevTools()

    4.4 自定义顶部菜单

    • 通过frame创建无边框窗口

      const mainWindow = new electron.BrowserWindow({
          frame: false
      })
      
    • 自定义窗口

      <div class="header" style="-webkit-app-region: drag;">
      
      </div>
      
    • icon

      const mainWindow = new electron.BrowserWindow({
          width: 1000,
          height: 600,
          webPreferences: {
            nodeIntegration: true
          },
          frame: false,
          icon: './hm.ico'
        })
      
    • backgroundColor

    4.5 定义右键菜单

    js>index.js

    
    const { remote } = require('electron')
    const template = [
      {
        label: '粘贴'
      },
      {
        label: '赋值'
      }
    ]
    const menu = remote.Menu.buildFromTemplate(template)
    
    window.addEventListener('contextmenu', (e) => {
      console.log(123)
      e.preventDefault()
      menu.popup({ window: remote.getCurrentWindow() })
    })
    

    在index.html中引入

    <!DOCTYPE html>
    <html lang="en">
    <head>
      <meta charset="UTF-8">
      <meta name="viewport" content="width=device-width, initial-scale=1.0">
      <meta http-equiv="X-UA-Compatible" content="ie=edge">
      <title>Document</title>
    </head>
    <body>
      <button>打开新的窗口</button>
      <script src="./js/index.js"></script>
    </body>
    </html>
    

    能够在html中使用node方法

    const mainWindow = new BrowserWindow({
      width: 800,
      height: 500,
      webPreferences: {
        nodeIntegration: true
      }
    })
    

    4.6 点页面打开浏览器

    • html

      <a id="a1" href="https://blog.csdn.net/weixin_41819098">打开浏览器</a>
      
    • js

      const { shell } = require('electron')
      const allA = document.querySelectorAll('a')
      
      allA.forEach(item => {
        item.onclick = function (e) {
          e.preventDefault()
          console.log(item)
          shell.openExternal(item.href)
        }
      })
      

    5. 自动刷新页面

    • 安装插件

      cnpm install --save-dev electron-reloader
      
    • 在入口引入插件

      const reloader = require('electron-reloader')
      reloader(module,{})
      

    6. 拖拽文件进行读取

    • 定义拖拽到指定区域

      <div id="drop">
      </div>
      
      #drop {
        width: 300px;
        height: 500px;
        background: hotpink;
      }
      
    • 添加拖拽事件获取文件路径

      // 添加拖拽
      const dropEl = document.querySelector('#drop')
      dropEl.addEventListener('drop', function(e) {
        if(e.dataTransfer.files.length === 1) {
          const filePath = e.dataTransfer.files[0].path
        }
      })
      
      dropEl.addEventListener('dragover', function (e) {
        e.preventDefault()
      })
      
    • 引入fs模块进行读取

      const fs = require('fs')
      
      // 添加拖拽
      const dropEl = document.querySelector('#drop')
      dropEl.addEventListener('drop', function(e) {
        if(e.dataTransfer.files.length === 1) {
          const filePath = e.dataTransfer.files[0].path
          const fileContent = fs.readFileSync(filePath).toString()
          this.innerText = fileContent
        }
      })
      
      dropEl.addEventListener('dragover', function (e) {
        e.preventDefault()
      })
      

    7. 打开对话框

    7.1 读取文件

    • 定义点击事件

      <button onclick="openFile()">打开</button>
      
    • 定义事件函数

      // 打开对话框
      function openFile() {
        const res = remote.dialog.showOpenDialogSync({
          title: '选择文件',
          buttonLabel: '哈哈',
          filters: [
            { name: 'Custom File Type', extensions: ['js','html','json'] },
          ]
        })
      
        const fileContent = fs.readFileSync(res[0]).toString()
        dropEl.innerText = fileContent
      }
      

    7.2 保存文件

    • 定义点击事件

      <button onclick="saveFile()">保存</button>
      
    • 事件函数

      // 保存对话框
      function saveFile() {
        const res = remote.dialog.showSaveDialogSync({
          title: '保存文件',
          buttonLabel: '保存文件',
          filters: [
            { name: 'index', extensions: ['js'] },
          ]
        })
        fs.writeFileSync(res, 'hahhdasdshafsdahjk')
      }
      

    8. 消息提示

    • 定义事件

      <button onclick="messageBox()">提示</button>
      
    • 事件函数

      // 提示信息
      function messageBox() {
        remote.dialog.showMessageBoxSync({
          type: 'none',
          buttons: ['确定'],
          title: '提示消息',
          message: '明天会下雨呦'
        })
      }
      

    9. 定义快捷键

    9.1 主线程定义

    • 引入

      const { app, BrowserWindow, globalShortcut } = require('electron')
      
    • 在ready中注册快捷键

      const { app, BrowserWindow, globalShortcut } = require('electron')
      

    9.2 渲染进程定义

    • 通过remote注册

      // 定义快捷键
      remote.globalShortcut.register('Ctrl+O', () => {
        console.log('ctrl+o')
      })
      
    • 定义快捷键最大、最小、关闭窗口

      globalShortcut.register('Ctrl+T',()=>{
          mainWindow.unmaximize();
        })
        globalShortcut.register('Ctrl+H',()=>{
          mainWindow.close()
        })
        globalShortcut.register('Ctrl+M',()=>{
          mainWindow.maximize()
        })
      

    10. 渲染进程和主线程通讯

    • 定义按钮

      <div class="maxWindow no-drag" onclick="maxWindow()"></div>
      
    • 事件函数

      function maxWindow() {
        ipcRenderer.send('max-window')
      }
      
    • 主线程定义事件

      ipcMain.on('max-window', () => {
          mainWindow.maximize()
        })
      
    • 传参

      let windowSize = 'unmax-window'
      function maxWindow() {
        windowSize = windowSize === 'max-window' ?'unmax-window':'max-window'
        ipcRenderer.send('max-window',windowSize)
      }
      
    • 接收参数

      ipcMain.on('max-window', (event,arg) => {
          console.log(arg)
          if(arg === 'unmax-window') return mainWindow.maximize();
          mainWindow.unmaximize()
        })
      
    • 通过isMaximized判断当前窗口

    11. 网络请求

    async function getMsg () {
      const res = await fetch('http://127.0.0.1:3006/api/person').then(res=>res.json())
      console.log(res)
    }
    

    12 .electron结合框架开发

    12.1 结合react

    利用react初始化项目
    • npx create-react-app electron-react
    • cd electron-react
    • npm start
    安装electron
    • cnpm i electron

    • 添加electron的任务

      "main": "main.js",
      "scripts": {
         "start": "react-scripts start",
         "build": "react-scripts build",
         "test": "react-scripts test",
         "eject": "react-scripts eject",
         "electron": "electron ."
        },
      
    • 添加main.js https://github.com/electron/electron-quick-start/blob/master/main.js

      const {app, BrowserWindow} = require('electron')
      
      function createWindow () {
        // Create the browser window.
        const mainWindow = new BrowserWindow({
          width: 800,
          height: 600
        })
        // Open the DevTools.
        // mainWindow.webContents.openDevTools()
      }
      
      app.whenReady().then(() => {
        createWindow()
      })
      
    • 加载react项目

      mainWindow.loadURL('http://localhost:3000/')
      

    12.2 electron结合vue

    同react

    13 electron打包

    • 将vue项目打包

    • 修改electron引入的文件

      mainWindow.loadFile('./dist/index.html')
      
    • 安装electron-packager

      "packager": "electron-packager ./ HelloWorld --platform=win32 --arch=x64 --out ./outApp --overwrite --icon=./favicon.ico"
      
    展开全文
  • Flutter开发桌面应用-第一个windwos桌面应用参考官方文档首先升级以支持windos、linux等环境支持创建第一个flutter程序最后,成功!hhh末尾 前言:Alpha现已对Windows桌面提供Flutter支持(以及macOS和Linux支持)!...


    前言:Alpha现已对Windows桌面提供Flutter支持(以及macOS和Linux支持)!
    本文参考官方文档,介绍如何在windos运行一个windos窗口程序
    在已安装flutter的基础上展开介绍

    参考官方文档

    官方文档

    首先

    在命令行运行flutter doctor以查看是否有任何未解决的问题,如有问题需先解决!后续就只需要处理,后续产生的问题了。

    升级以支持windos、linux等

    在命令行上,执行以下命令,以确保您拥有最新的桌面支持并已启用。如果看到“未找到Flutter:命令”,请确保已安装Flutter SDK,并且已在安装 路径中。
    依次执行以下命令:
    1、切换flutter通道
    flutter channel dev
    2、更新fluuter
    flutter upgrade
    3、配置你的平台
    flutter config --enable-windows-desktop

    升级报错时参考:
    升级PowerShell .5.0

    环境支持

    在此运行

    flutter doctor
    提示:
    1、android sdk…
    2、visual studio…
    解决:
    1、android sdk报错,执行,报错提示需要输入命令就可以了
    2、visual studio安装环境支持具体如下:
    vs 2019版本
    安装成功后需要如下工具包,参考图2图3详情
    详情参考如下

    创建第一个flutter程序

    找到一个空文件夹,在命令行输入
    创建项目
    flutter create myapp
    转到项目目录
    cd myapp
    运行项目
    flutter run

    最后,成功!hhh

    末尾

    有问题欢迎留言!一起交流解决。

    展开全文
  • 使用React Native开发桌面应用

    千次阅读 2020-06-14 00:09:09
    概述 React Native是Facebook技术团队于2015年4月在早先的React...如果有使用React Native开发桌面应用的需求,那么可以参考下微软推出的 React Native for Windows + macOS技术。React Native for Windows + macOS是

    概述

    React Native是Facebook技术团队于2015年4月在早先的React前端框架基础上开源的一套移动跨平台开发框架,可以同时支持iOS和Android两大移动平台。那有人会问,除了可以开发移动跨平台应用,那能不能使用React Native开发桌面客户端应用呢?答案是肯定的。

    如果有使用React Native开发桌面应用的需求,那么可以参考下微软推出的
    React Native for Windows + macOS技术。React Native for Windows + macOS是微软在React Native 框架的基础上开发的一套使用React前端技术来开发桌面应用的技术,它们在GitHub上的地址分别为:react-native-windows
    在这里插入图片描述
    react-native-macos
    在这里插入图片描述
    目前,最新版本是0.61,而React Native的最新版本是0.62.2,以下是React Native for Windows + macOS的历史版本。

    展开全文
  • Java桌面应用程序

    万次阅读 多人点赞 2017-04-13 15:27:47
    java桌面应用印象因为桌面程序运行在宿主机器上, 所以比如你运行java桌面程序,必然要安装java虚拟机, 也就是相当于在操作系统上再加一层抽象, 这与直接调用api的桌面程序效率相比,或多或少低一点。 因为...

    java桌面应用印象

    因为桌面程序运行在宿主机器上,
    所以比如你运行java桌面程序,必然要安装java虚拟机,
    也就是相当于在操作系统上再加一层抽象,
    这与直接调用api的桌面程序效率相比,或多或少低一点。
    因为java主要用于因特网编程和移动开发,如jsp,
    而这些代码是运行在服务器端的,客户端(浏览器)只需要接收html代码即可,
    不需要安装java虚拟机,
    又因为java的跨平台性,语言又比较简单,还有就是背后有oracle这样的大公司支撑,
    其出身简直就是高富帅,堪称贵族语言。
    所以java的用武之地太多了,而桌面应用方面,由于微软的垄断,所以java显得有点不太出众,
    又加之在其他方面做的太好,把人的注意力都吸引了,
    所以造成了人们感觉java不适合的假象,其实如果你执意要用java开发桌面应用的,我感觉完全没有问题。

    Java桌面应用软件

    mac上有不少软件是java写的.
    其他平台上也有.
    比如ecilpse,netbeans,jedit,永中office,VP UML,jude.
    用JAVA写的桌面软件也蛮多的.

    vuze就是,
    还有charles我常用,
    我的看法是基本上对特效和本地外观要求不是那么高的话,
    java其实也是可以考虑用来做桌面软件的。
    SWING的设计极其稳健。

    请问怎么看一个软件是用java开发的还是用其他(比如C#或者mfc)开发的?
    如果没有jre库就跑不起来的就是JAVA写的(当然有的会自己打包JRE,但这样的体积一定不小)

    DB2的图形化界面就是用java写的。
    不属实啊,Jetbrains的系列IDE全是Java开发的啊,够复杂也够好用了吧

    在工业界,Java开发的桌面工具也已经很多了。
    面向最终消费者的游戏也有,
    最近2年很火的游戏的minecraft就是用java开发的,效果很好。
    Java开发桌面程序效率还是很高的,
    不过如果要开发出和native程序一样的体验,难度就比较高了。

    Java桌面软件的特征:

    1. 确实是想跨平台对界面并没有太多效果的要求,
    2. 界面效率也不是瓶颈相比于其他GUI工具,
    3. 开发人员对Java更为熟悉比如,
    4. 一些工具的管理界面
    5. 针对计算机专业的用户的定位

    分析Java与桌面应用

    不过只做过Java在互联网服务方面的应用,没做过桌面应用,
    所以只能说说自己的理解。
    如方圆同学所说,
    很多跨操作系统工具都是Java编写,
    特别是一些Java相关的开发工具

    Java的大支持企业IBM, Oracle/Sun/MySQL
    都有众多基于Java编写的工具

    除此之外,貌似非常经典的足球经营类游戏Football Manager系列也需要跑在Java虚拟机上,
    至少一部分是这样的,
    还有PSP的一个模拟器

    至于Java适不适合做桌面应用,这其实算是个仁者见仁,智者见智的问题,那么主要从其优缺点来说吧。
    使用Java开发桌面应用的优势在于

    优点一:
    可以以较小的成本实现图形应用的跨平台
    众所周知,对于窗口应用,需要很多平台依赖的图形库
    当然,QT也是个很好的跨平台图形库解决方案(c++的)。
    因此对于非商业应用,特别是一些需要支持多平台的工具而言,Java是个很好的选择

    优点二:
    Java语言非常流行,拥有众多开源中间件,
    基于其开发自己的应用非常方便尽管如此,

    Java进行桌面开发也有很多缺点:

    缺点一:
    Java应用必须运行在JVM上,因此安装Java应用必须安装JRE,其入侵性给用户带来不便
    java程序不能直接运行,机器上需要安装jre,而jre体积挺大

    (反驳:其实JRE不需要单独安装,直接打包就行.)
    (反驳:JRE并不大)

    缺点二:
    JVM一般启动时规定内存占用等参数,因此对系统资源浪费较大,

    (反驳: 至于说规定内存参数,也不是啥问题.毕竟客户端所需要的资源比较小.)

    对于单CPU(尽管目前一般都是双核甚至4核)以及3G内存的32位个人电脑来说,
    仍然效率不如基于操作系统API的本地应用

    (反驳: 至于说效率,JAVA在JIT编译之后未必比C++/C慢多少.
    而且在client模式下运行的JIT临界值很小,解释执行很快会变成本地代码.)

    运行速度慢,初次启动时间慢

    缺点三:
    和大多数现代语言相比,Java语言语法仍然比较繁琐,开发成本比较高
    除传统桌面应用外,目前RIA桌面应用也比较流行,
    但无论是
    Java还是JavaFX的竞争力仍然不及
    Adobe系的Flash/Flex/AIR等,
    恐怕未来还要被HTML5/CSS3/Javascript进一步压制。

    (同意:
    至于说ADOBE AIR,跟JAVA也是一样的模式.
    只是JAVA SWING想写出很好的程序
    需要对设计模式和SWING常用的设计手法了解很多
    但是似乎AIR简化很多.
    而且就IDE来说,似乎AIR比SWING也强很多.
    至于说HTML5之流,小应用可以吧,大应用不看好
    )

    缺点四:
    swing本身非常优雅,但是缺乏可靠又强大的可视化设计工具,界面设计基本上得靠编码完成,开发效率上不去。
    默认风格不够漂亮,要做漂亮,需要下大功夫。
    与操作系统交互不够方便 。

    (反驳:各种IDE都有swing的可视化插件,开发效率要比C++快太多太多。比如:windowbuilder)


    描述现状

    单纯的J2SE确实很难开发桌面应用。
    必须对它进行改造,
    于是有了SWT,JFace等框架
    (完全颠覆了它原有的AWT、SWING图形库),
    于是有了Eclipse这样的工具。
    要不J2SE开发的应用都有很强的专业性,
    针对计算机专业的软件,
    因为计算机专业用户电脑多数安装有JVM。
    比如ETL工具Kettle,(注解: Extract-Transform-Load,数据从来源地出发,1.抽取2.转换3.加载 到目的地.数据仓库)
    Java代码分析工具Findbugs

    Java的桌面程序并不少,
    其中最为知名的莫过于Eclipse。
    在Linux和Mac下,
    Java程序的比例远高于Windows下。
    不过,“Java不适合写桌面应用”的说法有一定道理,

    论调背景

    论调的主要背景是供Windows下使用的企业桌面应用的开发。
    由于一些历史和定位的原因,
    对于这种GUI程序的需求,
    Java的优势不明显,劣势比较明显。

    Java传统

    这事还得从Java的传统,“跨平台一致性”说起。


    第一: 后台跨平台
    在写后台逻辑的时候,跨平台是好东西。
    很多公司都是在Windows下开发,在Linux下部署,方便。


    第二: 前端GUI跨平台
    但涉及到GUI的时候,跨平台就成了个“看上去很美”的东西。
    理论上,我写个窗口,在Windows和Mac下都一样能用,那是多么美好的事啊。
    但实际上,每个平台提供的GUI控件多多少少有点差别
    一坚持跨平台,麻烦就来了,该支持多少控件,怎么支持呢。


    发展历史 awt

    一开始,Java的思路是:那简单啊,
    有原生控件干嘛不用,
    至于不跨平台的,就不支持呗,
    又坚持了原则(跨平台),又回避了问题。(平台控件差异)

    这一代的gui库,awt,就此诞生。

    因为Java一开始是一根筋想推广Applet的,只是“顺便”也支持本地应用
    设计成这样不能说不合适,
    毕竟,HTML也是同样的思路,只支持几种最基本的控件。
    但对于想开发复杂点界面的人来说,就有麻烦了。

    想来个目录树吧,对不起,不支持;
    想来个进度条吧,对不起,不支持。
    旁边放着DelphiVB这么方便的东西,哥干吗受这气啊。


    发展历史 swing

    这样一来,Java自己也觉得说不过去了。
    但又要跨平台,又要提供丰富的控件支持,那就只有另起炉灶,
    开始用第二种思路:自己动手、丰衣足食,自己重写一套GUI控件,代替操作系统的原生控件。
    这一代的gui库,叫做swing
    这也是一个想“彻底”解决问题的思路,但是要付出代价。

    代价之一就是效率
    我们可以参考一下另一个相同思路的产品——flash
    为了实现矢量动画,在flash的那个小框里,图是一帧一帧地算出来的。
    接下来的事情我们都知道了:
    复杂的flash动画极耗cpu;
    iPhone说,您太耗电了,俺就不支持了;
    Adobe说,那好吧,那俺也不费心折腾移动版flash了。

    自己画出来的控件毕竟不能跟原生控件比效率,
    尤其是在早期Java优化还不够完善的时候。
    而且,自力更生的目的只是为了平台兼容,不是为了更好的效果,这事儿其实怎么想怎么亏。

    代价之二就是效果
    自己画的控件毕竟只是模拟,还是会有细节差别。
    比如著名的毛玻璃效果,这不是简单套样式就能套出来的。
    而且,各个平台控件的风格本来就不一样,
    虽然swing提供了几种外观,
    但大部分程序出于偷懒或是跨平台一致考虑,还是使用默认外观。
    默认外观跟平台不一致倒也不是问题,主要是别比平台效果土
    我用着win7,一个程序非让我感觉回到xp时代,心里特别添堵。

    java GUI界面的罪过要追溯到SUN开始设计GUI的时候,
    他们招了一个强力的女人作为GUI部门的老大,
    这个女人一来就推翻了sun原来的awt思路,
    带着她以前的团队成员加入,后来就诞生了swing。
    这个女人叫Amy Flowler,
    她之前在parc-place公司任职,
    一贯就是模拟界面的倡导者。
    

    发展历史 swt

    就这样,一帮人商量着,又琢磨出个新思路:做适配
    **平台有这个控件,就直接用,保证效率;
    没有,再造轮子,保证可用。**

    就这样,swt问世。

    eclipse的gui就是基于此。
    swt是赞,不过这属于改良,两个根本问题仍在:
    1. 跟操作系统api打交道不是Java的长项,效率仍然不能与c++等相提并论。

    2. 到底要不要跨平台。
    如果要跨平台,swt接浏览器控件、接ActiveX控件的功能就成了形同虚设;
    而要是不想跨平台,又何必使用Java呢,.Net在一旁已经恭候多时了。

    (补充:原生控件在各平台下还是会有些差异,感谢@冯东指点)

    @冯东:
    1.技术本身,很难做到UI跨平台

    另一方面,即使每个平台都支持的 control 也多多少少有些差异。

    比如同样是文本框,Windows 和 Mac (Cocoa) 对待 non-English 输入法选词的语义就不同。

    再比如对 focus-lost 的处理二者也不同。

    所以 SWT 其实目前很难做到 Swing 那样的跨平台。
    跨平台么,终究还是只能做到最大公约数,
    比如 x86 支持 4 级,Unix 只用两级。可那是大家都同意不用的。(硬件上)
    在 UI 级别可没有人能同意不用操作系统的某个功能。

    2.产业问题

    除了技术本身,还有一个产业的问题,
    围绕着GUI控件也存在一个生态环境,没有丰富的领域、行业控件的支持,
    技术本身的战斗力也会大打折扣。而Java这方面的生态较为薄弱。


    发展历史 JavaFX2.0

    我觉得现在如果是写新的Java桌面,
    JavaFX2.0应该是基于Java的最好选择了.
    基于Java的RCP( Rich Client or Rich Ajax Applications (RCP+RAP))
    主要有Eclipse Netbeans平台,他们分别依赖于SWT Swing,
    关于Swing,Java的方向已明确说了,不会再发展Swing,将有JavaFX慢慢取代之,
    而JavaFX的发展,是否在iPad 智能手机上下功夫,暂且未定。
    但至少是作为Java 桌面的主力了

    Java在桌面应用程序方面表现得比较好的框架还得说RCP,
    Rich Client Platform,富客户端平台,
    RCP提供了丰富的界面控件,
    这使得基于Java开发桌面应用也变得容易了很多,
    偶去年本科的毕业设计就是用RCP开发了个桌面软件-数字证书管理工具,
    有兴趣的可以到csdn下来看看
    http://download.csdn.net/detail/dongshilongdsl/3301297


    发展历史

    Java的GUI一开始定位就不是消费者市场,
    Java Applet的产生是因为当时Web还没有出现一种能够展现丰富动画效果的技术。
    Flash的后来居上更是加速了Java Applet技术在Web中的消亡。
    而AWT只是为了支持Java Applet技术存在的。
    后来Java技术更是被SUN定位在企业开发领域,
    桌面领域也变得比较小众和专业化。
    再后来,Swing库更是一个被叫做Amy的女人弄得一团糟….
    Swing/AWT说实话是比较烂的,
    要不然IBM不会自己开发一个SWT库替代。


    原因分析

    尽管我们可以用Java创建出桌面应用,
    但只要我们想开发真正的富桌面应用我们就无法真正使用Java
    而使用JNI、C/C++和平台依赖的libraries等。
    使用Java构建桌面应用更多的是困难和麻烦,
    比如即便想要在Java应用内创建一个高效的优良的web浏览器都是一件难事。
    而且没有用Java编写的图片处理应用,
    没有一个纯粹的Javaweb浏览器,
    没有数字音频应用,
    没有3D建模器,
    没有矢量图形编辑器,
    没有先进的光栅编辑器

    Java今日在桌面端所到达的高度只能满足那些服务器开发者,
    因为他们只需要在远程服务时使用电脑桌面上的简单界面。
    过去我们一直说这是因为Java太慢,
    无法在一个慢的平台上开发出如此复杂的应用。
    但我们这样说是错的。
    原因有两点:
    一,Java从来就没有慢过,即便有些部分曾经慢过,
    但没有人怀疑当它需要被用到服务器端时它会迅速地得到提升,比如JITs,GCs等。
    这一点也正是Java语言卓越的地方。

    二,由于Java平台的天然特性,
    Java应用总是第一个利用市场上新硬件和新操作系统的应用。
    一旦JVM被配置到了一个新系统中,
    几乎不需要任何编辑和调试,
    Java应用就可以在上面全速运行。
    比如你在32位的操作系统上开发了一个应用,
    它就可以全速运行在Windows7或者Solaris的64位JVM上。
    所以所谓的Java太慢根本不能成为Java在桌面端碌碌无为的借口。
    而且,如果你是一个终端用户,你甚至不需要从网站上重新下载应用,
    这意味着不仅终端用户和开发者得到了速度提升,
    甚至应用的执行性能的前边也得到了速度提升。

    今天,JIT在runtime为本地操作优化代码已经做得很棒了,
    这意味着你可以挖掘出你运行的硬件的全部的能力,
    这是一个静态编译语言永远也无法竞争过的性能,
    只是这个性能如果可以运用到桌面端和游戏领域就好了

    我们总是说:
    由于Sun总是一个服务器端公司的原因,Java在桌面端一直没有真正的机会。
    而Oracle的收购让这种境况看起来不会有什么改变。
    希望这不要再继续下去,
    为了Sun、Oracle和Java自身的利益,
    Oracle内部的知名人士应该提醒公司来让他们知道:
    如果缺乏了在桌面端的能力和效率,
    必将影响Java的普及率甚至它在服务器端的占有率。

    我们一直以来习惯着Sun主要提供服务器端服务,
    因而想象着未来更多的处理能力还是出现在服务器端,
    而客户端不过是连接服务器的简单服务。
    这种情况已被证明是绝对错误的。

    因为未来的桌面应用将服务、应用与硬件所有的运算能力相结合,
    大量的数据和解码、声音、图像、视频被开发者处理,
    而且用并行编程的方式来实现,
    既保证了丰富的性能又保证了速度。
    对开发者来说,未来的服务既需要他们在客户端处理也需要在服务器端处理:
    执行复杂的搜索、图像、视频以及虚拟3D环境需要服务器端的技术,
    而远程服务如医学分析、远程教育和远程会议等则需要客户端能力。

    只是令我们感到失望的是历史又一次地重复了,
    因为至今Java中还没有什么大的动作。

    ArminEhrenreich在回复中说道:
    说的好,我完全认同。
    确实迫切需要跨平台的桌面应用技术,
    而且我不认为C++结合Qt是个好的选择。
    你说阐述的问题之所以没有引起很多的共鸣,我想是文化上的问题。
    许多Java社区的人们包括Sun内部的负责人无法理解你所说的,
    所以我断言Oracle也不会对Java做出什么大的改变。
    客户端现在基本上被微软和Apple包揽。
    到Cocoa论坛中会发现他们谈论的是GUI的可用性、响应性、终端户如何处理桌面应用等而我们的论坛呢,
    大部分人认为应用的未来在服务器端。
    这就是文化上的差异。
    但是桌面技术需要做很多工作,
    Swing很慢很慢地进化,
    连同Netbeans平台、Java3D,JOGL等应用勉强成为了桌面端的一个选择。

    但Sun置此境遇于不顾,只是模仿Flash发布了一款新的脚本语言,
    但是那些API只有使用JavaFX才可用Jeff

    Martin回复道:
    正确的观点,但我有一点不同。
    Sun真正的问题是他应该吃自己的饭,
    用自己的力量来用Java写一些实在的桌面应用,
    这可以证明他们关于Java在桌面端的承诺,证明他们可以写出应用、提升框架和工具。
    我不认为另一个框架会帮助Java。

    James Sugrue回复道:
    我同意作者观点,我也很支持桌面端开发。
    看看现在处于开发中的Eclipse.e4中的一些项目,
    它们为桌面和浏览器提供了一个解决方案,所以我想还是有一些希望的。
    但我认为我们不需要过分聚焦于桌面端,JavaFX是正确方向上的一个迈进,
    只是无法在Swing和Java3D/JOGL中看到应用提升。
    {Java支持OpenGL(JOGL)是近期在Java OpenGL图形API结合。它是一个包装库,它可以访问OpenGL API,并且它被设计来创建Java编码的2D和3D图形应用程序。}

    Osvaldo Doederlein回复道:
    我认为JOGL的支持没有那么糟糕,
    毕竟它是JavaFX Desktop Runtime的一个依赖。
    实际上,我们可以写一个非JavaFX的小程序,
    而且不需要请求本地代码的许可性就以配置。


    据说Java + QT也可行, 只不过没试过, QT是跨平台的, Java也是跨平台的, QT本身的效率自然大于Java, 不知道是否可行
    awt,jface. 试试看.

    不能简单说java不适合做桌面系统,
    每一种语言都有它的专长。
    java做桌面开发更多的是面向功能开发,
    在用户交互方面确实是它的短板。

    钟声 的答案比较全面了。不过从 @陈昊 的并非回答的回答说开:
    很多学JAVA的人一开始学都听过这句。。于是SE就只被人当作基础过渡算了。。
    结果JAVA程序员很大部分都聚拢在EE 关注了 希望得到更多更全面的答案

    那么,很多人一开始听过这句是谁说的?
    为什么 SE 过渡之后的终极是 EE?
    答案是:说这话的人正是 Sun。
    Java 本来是作为 Web 上的 rich-client 设计的,
    Applet 在浏览器上失败之后,
    搞基于 ActiveX 的 Applet plug-in,再失败之
    后搞 Web Start,再失败之后,
    Sun 祭出 EE,宣称 GUI 它不玩了,
    宣称 Java 是最好的 server-side 语言。
    有人说这是个「见仁见智」的问题。
    问题就是 Sun 这位贱人是什么仁什么智啊。

    我想Adobe的客户端程序应该主要是用C++写的,那么Adobe的服务器端程序呢,会使用Java吗?
    一路失败然后变成世界第一的语言……
    失败是商业失败。一路赔钱还投巨资改进白送,社区成功也不奇怪。
    ams就是java的,以前叫fms

    桌面程序不是现在软件的主流。
    你可以观察一下,java流行之后,
    如果需要使用桌面程序,基本上还是会考虑java的。
    至于java的性能问题。
    我觉得这个问题在现在的计算机上,不是很大的问题。
    java写桌面程序的优势是它的多线程支持,不足是缺乏足够可用的控件,很多东西需要自己写。
    swing的继承体系挺复杂的,理解起来需要一定的时间。
    JavaFX能够好一点但是也有控件不够丰富的问题。

    环境~·环境啦~~~
    java原生的运行环境应是JRE,
    虽然说可以转成exe,
    但是中间还是多了许多其他不必要的环节
    (因为,java主旨跨平台,既然功能多了代价也的高了。。 这和是时间常理 ,大家都懂。。。), C/C++直接就是和操作系统一直的开发语言,速度和适应性肯定比JAVA要好。。。。。。。。。。。



    需要JRE

    我用
    java+swt+excelsior
    写了几个java的桌面应用程序,
    感觉挺好的啊,
    除了界面不能搞的特别好看
    (其实用上swt-extension,eclipse.ui.forms,nfa等包做出来的界面还是过得去的),
    至于为什么不用RCP,
    是RCP的插件体系是给工具软件准备的,
    一般用途的Windows平台下的软件不需要这个特性,
    所以摒弃RCP,
    直接swt+jface;
    楼主少说了一个方面,就是安全方面,
    因为如果需要商业化这个java桌面应用的话,
    是需要一个编译打包方案的,
    这个我推荐excelsior,
    用了这个之后不需要jre了!
    目前最成熟的方案.当然编译出来的native exe可以再加上一个安全特性,
    比如虚拟机加密之类的;
    再者,对于界面,虽然我没有仔细研究过,
    但是相信java和c++做富客户应用比如游戏,差距不是语言本身,而是库

    1 Java必须有虚拟机支持。这点很多用户都讨厌,因此开发商也就会权衡。
    2 Java的程序运行不是原生程序快。这点很多用户都讨厌,因此开发商也就会权衡。
    3 Swing的设计器IDE远不如微软阵营的设计器IDE生产力高。这点很多程序员都会权衡。
    4 AWT设计得太失败。
    5 想要做跨平台的应用程序现在看来无异于天方夜谭。这就是为什么现在重组件流派的SWT大行其道的一个原因。Java GUI阵营本身也是分裂的。
    6 早期C/C++项目太多了。

    你找两个Java程序看看效果嘛。
    特别注意字体渲染效果,那是相当差啊。
    注意别在 Windows XP 下面。
    因为 Windows XP 的字体渲染效果也很差,一坨坨的点阵字体,比较不出来。

    因为更加适合写服务端

    在NetBeans Platform平台上看到很多成功的案例。。。。
    我看到Platform Showcase 这里面列表的时候惊吓了,
    其实NetBeans Platform很强大,很多国外软件都在用。
    而且用得很好。
    从以前做系统集成的角度来看,只是国内的Windows平台占有率太高,
    于是随便做个是软件,都要嵌入Word,嵌入Office,要用OLE,要用ActiveX。
    还要print打印机支持,还要加密狗之类的支持, 还要嵌入浏览器之类的。
    再一点,还需要很多windows系统的底层api调用,
    弄个什么客户端软件,都要防着会不会被360滥杀, 随便写个客户端,
    也要写注册表,改注册表什么东西之类。
    这些都不是java擅长的地方。
    所以,哎,没办法。

    java桌面在理工科各行业软件里面占有很大比例

    Desktop Java不能广泛流行的最主要原因是,跨平台的GUI方案已经有Web了。
    假如没有Web,大多数Enterprise Application会采用Desktop Java开发的

    有了HTML5 NODEJS 跨平台神马的都不再是问题了

    就像你不会用.net去开发安卓,虽然可以这样干

    这个标题有些歧义可能是导致争执的一个原因。
    在我看来Java真的不擅长写GUI应用。
    对于GUI开发我之前只在21世纪初使用过VisualBasic。
    2015年底由于有个想法想要用Java开发所以开始使用Java以及Swing,
    到现在对于Java很满意但对于Swing很吐槽。

    (首先说明,我认为Java除了“简单的”跨平台,
    另一个很大好处是其实它是一个平台,
    上面有很多组件和工具。
    这些组件和工具由于其跨平台特性多年来不断积累已经使Java远远超出了传统的“开发语言”的范畴;
    所以用C++和Java进行比较本身就有些问题。
    C++ 是程序语言一级的东西,
    而Java是开发平台一级的东西;
    而这也是我在离开大学15年后重新开始学习写程序选择Java平台的一个主要原因:
    Java平台完整实现了WebSocket)
    第一次NetBeans里面Swing Designer傻眼了。
    里面的东西非常强的面向代码,
    需要了解MVC模型,
    非线程安全每次都要使用invokeLater/invokeAndWait来插入,
    Worker等等这些都罢了,
    毕竟边用边学也就知道了。
    但是这个GUI Designer真的不得不吐槽。
    一拖放就不知道是什么结果了;
    无法使用箭头移动空间布局;
    修改一个控件的名字导航栏里的控件树就会折叠,
    图形界面也退回到JFrame主界面;
    害你不得不重复的展开树。
    更可笑的,无法手工该代码,
    所以想改个名什么的无法点击”refactor”,
    只有不断的点击鼠标;…就这种水平能进行精确空间控制才来鬼了。
    今天下午试用了一把FX,
    第一个需要吐槽的就是官方主页上找不到scene builder,只好谷了一个。
    一上来在拖出一个tab放在tab pane里直接挂掉;
    真是郁闷呀。拉里埃里森(Larry Ellison)本里本就没什么技术情结,
    Sun的那些开源项目统统砍掉,
    James Gosling辞职 ,
    FX在Oracle时代停滞不前,总之是吧Sun的那些东西拆的七零八落了。

    可以编写的
    而且可以做的比qt还漂亮
    而且做复杂的Java GUI开发
    也不需要使用到复杂的类库
    有一本书 ,
    里面有很多技巧关于如何实现漂亮而且实用的gui效果
    这本书大概07年就出来了
    作者很厉害
    就是 chet haase 和romain guy
    他们这这本书时还是Swing工作组
    后来是Android的核心ui框架的开发者
    每年的google io 大会都有他们发言
    这本书里面提到的很多概念都很厉害
    技巧也很多
    尤其是关于动画的实现技巧
    特别好 Java可以实现很好的ui效果
    Eclipse intellijidea都是基于Java实现的高级产品
    关键还有Android 也是用Java实现的 不也是很好吗

    java的优势在于处理网络问题,
    但是也提供swing以及awt组件库,
    所以使用java来开发桌面应用是可行的,
    但是为什么没有大规模的应用,
    确实因为效率低,
    在这方面我最有感触,
    因为我用java写过简单的桌面应用,
    下面是实现的效果:
    给我的感觉,
    java写出的代码好丑,
    主要是Eclipse IDE用户体验真心很差,打开超慢无比。
    所以综合以上观点,还是学前端才是王道

    项目完成后,C#程序员开开心心地发布了,享受着程序流通的喜悦
    而Java程序员在干什么呢?
    他在网络上搜索:
    1.如何把JAR打包成EXE
    2.如何说服玩家/用户安装JRE
    3.如何把JRE精简后打包入住
    4.如何让杀毒软件不要误报我的JAVA程序
    5.如何教用户设置本地的JRE路径
    6.不兼容最新版本JRE怎么办

    我觉得语言没有可比性,
    可比的只是现有的条件 。
    我是做java开发的,在pc界面开发方面,.net有很大的优势,
    但在做业务处理时,java有很多开源的东西可以用。
    所以两都有擅长。
    如果有现成的.net人员,那.net开发最容易,哪怕是业务量再大也是可以处理的。
    如果有现成的java人员,想把界面做成什么样都可以,
    请看weblaf与javafx两个UI框架。
    如果有html人员,
    想把界面怎么搞就怎么搞,
    但请不要给他太复杂的业务。

    minecraft,
    spiral knightsm
    $还掏了一大笔钱去买minecraft
    还有前面无数小白说的跨平台问题
    这个native compiling不就可以了嘛,
    早就解决了还搜,搜什么哟,
    自己无知就当别人都傻
    现在也早不是什么微软占主导的时候了国外这些年macosx那叫一个风起云涌,
    君不见硅谷一搞seminar,清一色macbook pro嘛?
    你不会以为上面跑的都是盗版的windows吧?
    只有国内姑娘才这么干说这些没有用,你觉得可以就动手去做,
    你不动手做,给自己找无数的理由这个不适合,那个不合适,再好工具都是扯

    确实不适合,但不是不能。
    最根本的原因在于同样的收获,
    选择Java会付出更高的成本。
    而且,
    很多UI效果Java根本没有任何现成的解决方案!
    所以,除非有某些特殊情况(譬如有一大帮子Java工程师且对UI没有任何要求),
    一般人不会选择Java做桌面应用。

    展开全文
  • HTML5桌面应用程序开发

    万次阅读 多人点赞 2018-10-22 20:27:27
    前端时间要写一个桌面软件,比来比去没有满意的,要么不好看,要么不好用,要么打包体积太大。所以就有了这个小项目——easy...创作桌面应用,不需要掌握QT,C++,C#,Java那些繁琐的东西,只要会创建网页就可以。同...
  • 开始使用 Flutter 构建 Windows 桌面应用吧!

    万次阅读 多人点赞 2020-10-14 09:30:00
    如果您想了解 gskinner 是如何开发这款应用的,可以看看他们的博文: Flokk - 我们如何使用 Flutter 构建桌面应用。 下载 Flokk https://github.com/gskinnerTeam/Flokk/releases Flokk - 我们如何使用 Flutter 构建...
  • 把java web应用包装成桌面应用的简单做法 把java web应用包装成桌面应用的简单做法 把java web应用包装成桌面应用的简单做法 把java web应用包装成桌面应用的简单做法
  • 如何卸载Adobe Creative Cloud 桌面应用程序: 到Adobe官网下载专用的卸载工具, 网址:网页链接 找到Creative Cloud Uninstaller.zip点左侧的“获取文件”, 下载后,解压后直接运行就卸载掉了。 完全不影响已安装的...
  • HTML5封装成桌面应用

    千次阅读 2019-06-11 12:23:18
    HTML5封装成桌面应用1、准备工作:2、封装3、打包 1、准备工作: web项目地址 nw.js下载网址 reshacker(度娘自行下载) Inno Setup(度娘自行下载安装,有中文版) 2、封装 1、解压目录结构如下:2 2、在解压好的根...
  • Electron将Web页面打包成桌面应用实例

    万次阅读 多人点赞 2018-07-02 12:07:32
    上一篇文章Electron-vue脚手架改造vue项目 介绍了如何将Vue项目构建成桌面应用的方法。 这篇文章将继续介绍Electron构建桌面项目,不仅仅局限于Vue项目,使用Vue项目做案例,只是目前做的Vue项目比较多,拿其中一个...
  • 来源 |xiangzhihong前言虽然 B/S 是目前开发的主流,但是 C/S 仍然有很大的市场需求。受限于浏览器的沙盒限制,网页应用无法满足某些场景下的使用需求,而桌面应用可以读写...
  • Linux 桌面应用程序

    千次阅读 2019-10-08 17:52:48
    要在Linux下开发具有图形界面的桌面应用程序,我们有许多选择。当然,除了语言方面的考虑外,我们更多的是考虑窗口部件工具箱(以前成为控件库或组件库)的选择,这将在很大程度上影响我们的开发效率。 总结:Pyqt...
  • 为什么用Python开发桌面应用程序

    万次阅读 2018-01-22 15:15:40
    为什么用Python开发桌面应用程序 为什么用Python开发桌面应用程序 1)wxWidgets是一个比MFC优雅的库,TortoiseCVS用wxWidges而不用MFC,就是因为wxWidgets好用,而不是为了可以移植。 2)Python的面向...
  • 1、windows桌面应用自动化测试方案 (1)WinAppDriver是微软开发的自动化测试驱动,而windows是微软开发的,兼容性应该极好。 (2)WinAppDriver可以是appium的一个扩展,而appium支持python语言。 二、环境搭建 ...
  • Android开发自己的桌面应用,Luancher , 如果有做Luancher的朋友,可以跟大家分享下。
  • 打包1阶段-WEB应用打包成桌面应用

    千次阅读 2019-03-14 15:36:51
    最近公司让我接触了一些WEB应用打包成桌面应用方面的内容,下面就是我整理的内容: 一、首先我先介绍一下 node-webkit node-webkit是一个Chromium和node.js上的结合体,通过它我们可以把建立在chrome浏览器和node.js...
  • 安装好开发所需环境的编辑器 Visual studio 或者...同时Visual studio 拥有C#的开发环境,通过编辑器创建桌面应用即可。 步骤一、百度搜索Visual studio 进入官网 或直接点击此官网链接 https://visualstudio.m...
  • 【译】使用Blazor构建桌面应用

    千次阅读 2019-11-15 07:51:27
    随着最近.NET Core 3的正式发布,我认为我会尝试一个有趣的小实验。我喜欢使用Electron来创建基于Web的桌面应用程序。我想了解有关Blazor(ASP.NE...
  • JavaScript语言开发桌面应用

    千次阅读 2019-12-21 07:51:34
    不得不说JavaScript实在太强大,连电脑桌面应用都能开发出来,下方这个框架叫Electron。 在VS Code新建一个文件夹,然后在文件夹下方再新建一个文件夹,右键文件夹,打开终端,运行以下命令: # 克隆示例项目的仓库 ...
  • 尽管有很多 Python IDE(例如 Visual Studio Code、PyCharm 和最近刚出的 DataSpell)都支持编辑 ...当我们使用 JupyterLab 时,使用终端或使用 Anaconda Navigator 应用程序都可以启动它。但是无论哪种情况,都必
  • C# 桌面应用程序

    千次阅读 2017-02-25 22:03:43
    桌面应用程序下面介绍建立 用户界面 的基础知识,说明如何 启动和运行 桌面应用程序。 但并不详细讨论应用程序实际完成的工作。 微软推荐我们使用 WPF 技术来创建桌面应用程序。 我们以后会详细研究桌面应用程序...
  • vue项目打包为桌面应用程序

    千次阅读 2020-11-05 09:34:27
    转载:vue项目打包为桌面应用程序 1、通过Vue-cli创建vue 项目 vue create electron-vue-start 1 2、Vue项目下,命令行执行 vue add electron-builder 1 注意:执行过程中可能会出现错误,如果出现...
  • 01为什么用 JavaScript 来开发桌面应用?曾经的 JavaScript 脆弱、简陋、甚至有被边缘化的危险,不过 JavaScript 在经过了两次飞跃后(以 V...
  • python开发PC端桌面应用

    千次阅读 2020-09-09 11:46:32
    python开发PC端桌面应用 项目场景: 很多情况下需要用很短的时间开发一款在windows上离线运行的小工具,以便解决一些现实问题。比如公司近期有个紧急项目,需要根据算法需求人工标注海量的地址信息,开发周期和...
  • 跨越平台桌面应用开发框架electron使用的心路历程

    万次阅读 多人点赞 2018-06-26 15:48:34
    从接触Electron到真正去做出一个桌面应用,再到今天写下这边文章,大概花了三个月时间吧,到不是因为有多难学,主要是由于这纯碎是个人兴趣,自己是在业余时间干的,公司里面目前还没有推行,这段时间开发任务又比较...
  • 采用electron开发桌面应用

    千次阅读 2018-12-26 11:43:43
    什么是electron,能做什么?...2.前端做桌面应用. 前端做桌面应用(electron, nw) 1. electron link. 官网地址: [link]https://electronjs.org/ 2. nw link. electron开发桌面端应用有哪些优点 1.Web 技术——...
  • 利用Visual Studio2019 创建桌面应用进行调试 步骤一、打开编辑器 步骤二、点击创建新项目后进行到下一个界面 搜索并查询到如上图的这个选项,也可以进行筛选找到,不过这里的项很多,不太好找,直接搜索就行了。...
  • dotnet core 创建桌面应用程序(极简流程) 在最近 dotnet core 3.0发布 我们可以使用 dotnet core 开发windows PC端的桌面应用程序,我们下面出一下简单的创建项目流程,我用的vs版本是 ,vs企业版 16.3.1 环境:VS...
  • 前言 最近想开发一套Netty网关日志分析程序,用来分析设备的原始数据。因为网关是放在linux服务器上,之前查看日志是通过Xftp工具将日志下载到本地,然后找到对应的日志数据进行分析。 对于运维人员来说,上述的...
  • 桌面应用程序与web应用程序

    千次阅读 2017-10-25 10:36:54
    简单而言,在本地有应用程序文件的应用,都是桌面应用,在浏览器中使用的应用都是web应用。 原理上而言: 桌面应用有自己独立的进程与操作系统进行消息通讯,操作系统对事件进行检测,传递给桌面应用进程,桌面...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 415,711
精华内容 166,284
关键字:

桌面应用