image frame

Mor | void

Yesterday is a history. Tomorrow is a mystery. But today is a gift.
Empty spaces,fill the pages.

Exercism.org-Java-Log Levels

Instructions

In this exercise you’ll be processing log-lines.

Each log line is a string formatted as follows: "[<LEVEL>]: <MESSAGE>".

There are three different log levels:

  • INFO
  • WARNING
  • ERROR

You have three tasks, each of which will take a log line and ask you to do something with it.

1. Get message from a log line

Implement the (staticLogLevels.message() method to return a log line’s message:

1
2
LogLevels.message("[ERROR]: Invalid operation")
// => "Invalid operation"

Any leading or trailing white space should be removed:

1
2
LogLevels.message("[WARNING]:  Disk almost full\r\n")
// => "Disk almost full"

2. Get log level from a log line

Implement the (staticLogLevels.logLevel() method to return a log line’s log level, which should be returned in lowercase:

1
2
LogLevels.logLevel("[ERROR]: Invalid operation")
// => "error"

3. Reformat a log line

Implement the (staticLogLevels.reformat() method that reformats the log line, putting the message first and the log level after it in parentheses:

1
2
LogLevels.reformat("[INFO]: Operation completed")
// => "Operation completed (info)"

Methods

Modifier and Type Method and Description
int indexOf(int ch)
Returns the index within this string of the first occurrence of the specified character.
int indexOf(int ch, int fromIndex)
Returns the index within this string of the first occurrence of the specified character, starting the search at the specified index.
int indexOf(String str)
Returns the index within this string of the first occurrence of the specified substring.
int indexOf(String str, int fromIndex)
Returns the index within this string of the first occurrence of the specified substring, starting at the specified index.
String substring(int beginIndex)
Returns a new string that a substring of this string.
String substring(int beginIndex,int endIndex)
Returns a new string that a substring of this string.
String trim()
Returns a copy of the string, with leading and trailing whitespace omitted.
String toLowerCase()
Converts all of the characters in this String to lower case using the rules of the default locale.
String toLowerCase()
Converts all of the characters in this String to lower case using the rules of the given Locale.

Question Answers

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
public class LogLevels {

// Method for task 1
public static String message(String logLine) {
// Extract message part by using substring method
String message = logLine.substring(logLine.indexOf(':') + 1).trim();

return message;
}

// Method for task 2
public static String logLevel(String logLine) {
// Extract level part by using substring method, then convert it to lowercase
String level = logLine.substring(logLine.indexOf('[') + 1, logLine.indexOf(']')).toLowerCase();

return level;
}

// Method for task 3
public static String reformat(String logLine) {
// Use above two methods to extract message and level, then reformat the log line
String message = message(logLine);
String level = logLevel(logLine);

return message + " (" + level + ")";
}
}

Word

process
n.
(为达到某一目标的)过程;进程;流程;工序;工艺流程;(事物发展,尤指自然变化的)步骤;做事方法
v.
处理(文件、请求等);加工;数据处理;审核;审阅
v.
列队行进;缓缓前进
adj.
(用化学方法等)处理过的;照相制版的;经过特殊加工的;三色版的

processing
v.
处理;审阅,审核,处理(文件、请求等);加工;数据处理
v.
列队行进;缓缓前进
n.
加工;处理;运算
process的现在分词

formatted
v.
格式化;安排…的版式
adj.
格式化(的);格式化了的;有格式的
format的过去分词和过去式

Implement
vt.
实施;执行;贯彻;使生效
n.
工具;器具;(常指)简单的户外用具

lowercase
n.
小写字母;小写字体

occurrence
n.
发生;出现;存在;发生的事情;存在的事物

Electron学习笔记

Electron 简介

Electron(官网:https://www.electronjs.org/zh/)是由Github开发,用HTML,CSS和JavaScript来构建跨平台桌面应用程序的一个开源框架。

官网消息2023.8

22.x.y 持续支持

正如再见 Windows 7/8/8.1 所述,Electron 22(Chromium 108)的计划寿命终止日期将从 2023 年 5 月 30 日延长至 2023 年 10 月 10 日。 Electron 团队将会继续向 Electron 22 提供本计划中的任何安全修复,直到 2023 年 10 月 10 日。 十月 支持日期遵循 Chromium 和 Microsoft 的延长支持日期。 10 月 11 日,Electron 团队将支持回退到最新的三个稳定主要版本,将不再支持 Windows 7/8/8.1。

E25(23 年 5 月) E26(23 年 8月) E27(23 年 10 月)
25.x.y 26.x.y 27.x.y
24.x.y 25.x.y 26.x.y
23.x.y 24.x.y 25.x.y
22.x.y 22.x.y

时间表

Electron Alpha Beta Stable EOL Chrome Node Supported
26.0.0 2023-Jun-01 2023-Jun-27 2023-Aug-15 TBD M116 TBD
25.0.0 2023-Apr-10 2023-May-02 2023-May-30 2024-Jan-02 M114 v18.15
24.0.0 2022-Feb-09 2023-Mar-07 2023-Apr-04 2023-Oct-10 M112 v18.14

摘自:Electron 25.0.0

Electron 特点

Electron提供了易用的标记语法解析、绑定支持、灵活的布局排版、图形能力、数据处理、模板支持以及图形处理管线和插件拓展等功能。

  1. 易用性和标记语法解析:Electron使用HTML和类似于HTML的标记语法,让你可以轻松创建用户界面。它与Web技术紧密集成,你可以使用熟悉的标记语法来构建界面和布局。

  2. 支持绑定和组件:Electron可以使用JavaScript框架(如Vue.js、React等)来实现绑定和组件化开发。你可以使用这些框架实现数据绑定和构建可复用的组件,类似于Vue或React。

  3. 布局排版和插件拓展:Electron提供了灵活的CSS布局排版,你可以使用CSS进行多种布局。此外,Electron还允许你通过插件系统来进行布局的拓展,使你能够自定义和扩展布局功能。

  4. 图形能力和后处理管线:Electron支持强大的图形能力,你可以使用Canvas API或WebGL来实现延迟渲染和后处理管线(例如使用着色器)。这使得你可以处理复杂的图形渲染和效果。

  5. 数据处理和模板:通过JavaScript框架,你可以实现数据处理、触发器和数据前后期处理。此外,你可以使用JavaScript的动态特性来实现动态模板,根据设备数据的变化选择不同的模板。

  6. 图形处理管线和图形插件:Electron允许你使用图形处理管线和图形插件来增强渲染器的图形功能。你可以使用现有的图形库或编写自定义的图形插件来满足你的需求。

如何学习 Electron

  1. Electron官方网站:Electron的官方网站是一个重要的学习资源,提供了全面的文档、API参考和示例代码。你可以在官方网站上找到最新的Electron版本、教程和社区资源。访问Electron的官方网站:https://www.electronjs.org/ ↗

  2. Electron文档:Electron官方提供了详细的文档,涵盖了Electron的核心概念、API参考、应用程序架构和开发流程等内容。你可以在文档中找到关于窗口管理、文件系统访问、进程间通信等方面的信息。访问Electron的文档:https://www.electronjs.org/docs ↗

  3. Electron API演示应用程序:Electron官方提供了一个API演示应用程序,其中包含了许多示例代码,涵盖了Electron的各种功能和用法。你可以通过浏览这些示例代码来学习Electron的具体用法和最佳实践。访问API演示应用程序:https://github.com/electron/electron-api-demos ↗

  4. Electron Fiddle:Electron Fiddle是一个交互式的学习工具,它允许你在浏览器中编写和运行Electron代码片段。你可以使用Electron Fiddle来实验和学习Electron的各种功能和API。访问Electron Fiddle:https://www.electronjs.org/fiddle ↗

  5. Electron社区资源:Electron拥有活跃的开发者社区,你可以通过访问Electron的论坛、GitHub存储库、Stack Overflow和其他开发者社区来获取帮助、参与讨论和分享经验。在Electron的官方网站上可以找到相关链接和资源。

安装 Electron (国内)

安装 Node.js:

首先,确保你的电脑上已经安装了 Node.js。你可以从 Node.js 官方网站(https://nodejs.org ↗)下载安装程序,并按照安装向导进行安装。

查看node和npm版本

安装完成后,你可以在命令提示符或 PowerShell 中验证 Node.js 是否安装成功,通过运行以下命令:

1
node -v

如果成功显示 Node.js 的版本号,则表示安装成功。

catnodeversion

创建Electron 项目

在任意位置创建一个新的文件夹作为你的 Electron 项目目录。

createhelloworld

进入项目目录:

在命令提示符或 PowerShell 中,使用 cd 命令进入你的 Electron 项目目录。
例如,如果你的项目目录在桌面上的一个名为 HelloWorld 的文件夹中,你可以运行以下命令进入该目录:

1
2
:D
cd D:\electorn\HelloWorld

更换npm国内源

若原本的npm下载失败,尝试更换国内源

1
npm install -g cnpm --registry=https://registry.npm.taobao.org

(或)

1
npm config set registry https://registry.npm.taobao.org

使用 npm 进行全局安装

在终端中运行以下命令来安装 Electron 作为项目的依赖项:
这将在项目目录中安装最新版本的 Electron。

1
npm install electron -g

非全局安装:

1
npm install electron

这将下载并安装 Electron 及其相关依赖项。安装完成后,你的项目目录中将出现一个名为 node_modules 的文件夹,其中包含了 Electron 及其依赖项的文件。

检测是否安装成功

安装好后,我们可以通过 -v 命令检测 electron 是否安装成功,命令如下所示:

1
electron -v

显示版本即为安装成功

electronversion

其他命令:查看可提供的版本

1
npm view electron versions

初始化 npm

在项目目录中运行以下命令,初始化 npm 项目,并按照提示填写项目相关信息:

1
npm init

这将生成一个 package.json 文件,其中包含了你的项目的配置信息。

npminitelectron

创建入口main.js文件

在项目目录中创建一个新的 JavaScript 文件,例如 main.js,作为 Electron 应用程序的入口文件。
main.js 文件中编写你的 Electron 应用程序的代码。

1
2
3
4
5
6
7
8
9
10
11
12
const { app, BrowserWindow } = require('electron');
function createWindow() {
    const win = new BrowserWindow({
        width: 800,
        height: 600,
        webPreferences: {
            nodeIntegration: true
        }
    });
    win.loadFile('index.html');
}
app.whenReady().then(createWindow);

这段代码创建了一个 Electron 窗口,并加载了一个名为 index.html 的文件。

创建html文件

在项目目录中创建一个新的 HTML 文件,例如 index.html
打开 index.html 文件,并将以下代码粘贴到文件中:

1
2
3
4
5
6
7
8
9
10
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Hello World</title>
</head>
<body>
<h1>Hello World!</h1>
</body>
</html>

这是一个简单的 HTML 文件,其中包含一个标题为 “Hello World!” 的 <h1> 元素。

运行 Electron 应用程序

在项目目录中执行以下命令来启动 Electron 应用程序:

1
npx electron .

这将在 Electron 中打开一个窗口,并加载 index.html 文件。你应该能够看到一个包含 “Hello World!” 的窗口。

恭喜!你已经成功创建并运行了一个简单的 Electron HelloWorld 程序。
你可以根据需要修改 index.html 文件来实现更复杂的界面和功能。

successhelloworld

“Hello World” 文件结构

“Hello World” Electron 应用程序的文件结构通常如下所示:

1
2
3
4
my-electron-app/
├── index.html
├── main.js
├── package.json

electronmainjs

每个文件的作用:

  1. index.html: 这是应用程序的主要 HTML 文件,用于定义应用程序的用户界面。你可以在其中添加 HTML、CSS 和 JavaScript 代码来创建你想要的界面和功能。

  2. main.js: 这是 Electron 应用程序的主要启动文件。它包含了创建 Electron 窗口、加载 index.html 文件等核心功能代码。

  3. package.json: 这是应用程序的配置文件,其中包含了应用程序的元数据、依赖项和脚本等信息。通过运行 npm init 命令可以生成这个文件,并在其中添加你的应用程序的相关信息。

这是一个最简单的 Electron 应用程序的文件结构,它包含一个 HTML 文件和一个 JavaScript 文件。

你可以根据需要对文件结构进行扩展和修改,例如添加其他的 HTML、CSS 和 JavaScript 文件,或者将资源文件(如图像、样式表等)放在适当的位置。

查看 Electron 版本号

如果您的Electron应用程序已打包成可执行文件,则可以通过在命令行或PowerShell窗口中运行该文件,并添加–version参数来获取Electron的版本号。
例如:

1
my-electron-app.exe --version

这将输出您的Electron应用程序所使用的Electron版本号。

升级 Electron 版本

要升级Electron的版本,请按照以下步骤操作:

  1. 打开您的Electron应用程序的根目录并备份您的代码和配置文件。

  2. 在package.json文件中将Electron的版本号更新为您想要升级到的版本号,例如:

1
2
3
"dependencies": {
"electron": "^26.0.0"
}
  1. 在命令行中运行以下命令,以安装新版本的Electron:
1
npm install

这将会安装package.json文件中指定的所有依赖项,包括新版本的Electron。

  1. 更新您的Electron应用程序的代码和配置文件,以适应新版本的Electron。在新版本的Electron中可能会有一些API更改或功能更新,因此您可能需要相应地更改您的应用程序代码和配置文件。

  2. 测试您的应用程序,确保它在新版本的Electron中正常运行。

请注意,升级Electron版本可能会导致应用程序出现不兼容或错误。因此,在升级之前,请确保备份您的代码和配置文件,并在测试之前进行更改。

清除 npm 缓存

验证代理设置

如果你在代理后面,请确保代理设置正确。
你可以使用npm config命令检查和更新代理设置。在终端中运行以下命令:

1
2
npm config get proxy
npm config get https-proxy

如果这些命令返回一个值,表示已配置代理。
如果返回null,表示未设置代理

删除代理缓存

如果代理设置不正确或者你不需要代理,可以使用以下命令删除它们:

1
2
npm config delete proxy
npm config delete https-proxy

临时禁用代理:

如果你正在使用代理,并怀疑它导致了问题,可以尝试临时禁用它,以查看npm能否正常连接注册表。

使用不同的注册表

默认情况下,npm使用官方注册表(registry.npmjs.org)。
尝试切换到其他注册表,看看是否可以解决问题。
运行以下命令更改注册表:

1
npm config set registry https://registry.npmjs.org/

更改注册表后,再次尝试运行npm命令。

清除npm缓存

有时,npm缓存的问题可能导致连接问题。
你可以尝试通过运行以下命令来清除npm缓存:

1
npm cache clean --force

清除缓存后,再次尝试运行npm命令。

卸载 Electron

要卸载 Electron,你可以按照以下步骤进行操作:

全局卸载

  1. 如果你在全局范围内安装了 Electron,请使用以下命令将其卸载:

使用 npm:

1
npm uninstall -g electron

如果你没有在全局范围内安装 Electron,则可以跳过此步骤。

本地卸载

  1. 如果你在你的项目目录中使用了本地安装的 Electron,请在项目目录下执行以下命令卸载 Electron:

使用 npm:

1
npm uninstall electron

这将从你的项目的 node_modules 目录中移除 Electron。

请注意,以上命令将仅移除 Electron 包本身,而不会删除你的应用程序代码和其他依赖项。

如果你想完全删除 Electron 相关的文件,你可以手动删除以下文件和目录:

  • 从全局范围内安装的情况下,删除对应的 Electron 可执行文件的路径(例如 Windows 中的 C:\Users\your-username\AppData\Roaming\npm\node_modules\electron)。

  • 从项目目录中删除 node_modules 目录中的 Electron 相关文件。

  • 如果你使用了其他构建工具或打包工具(如 webpack、Parcel 或 Electron Builder),请根据相应工具的文档,删除和清理相关的配置文件和构建输出目录。

通过执行上述步骤,你将能够卸载 Electron。

报错信息及解决方式

【查看版本时报错】’electron’ 不是内部或外部命令,也不是可运行的程序或批处理文件。

‘electron’ 不是内部或外部命令,也不是可运行的程序或批处理文件。

使用 electron -v 查看版本时显示:

errorelectronversion

这个错误表明你尝试在命令行中执行 electron 命令时,系统无法找到 electron 命令。

这通常是由于 Electron 没有正确安装或没有在全局范围内配置导致的。

  1. 安装 Electron:首先确保你已经在你的项目目录中通过 npm 或 yarn 安装了 Electron。在命令行中进入你的项目目录,并运行以下命令来安装 Electron:
1
npm install electron
  1. 检查全局安装:如果你希望在命令行中直接运行 electron 命令,你需要全局安装 Electron。使用以下命令来全局安装 Electron:
1
npm install -g electron

请注意,全局安装可能需要管理员权限。

  1. 检查环境变量:如果你已经正确安装了 Electron,但仍然无法在命令行中执行 electron 命令,可能是因为系统的环境变量配置不正确。确保你的系统环境变量中包含 Electron 的可执行文件的路径。

对于 Windows 用户,你可以检查以下路径是否在系统的 PATH 环境变量中:

1
C:\Users\your-username\AppData\Roaming\npm\node_modules\electron\dist

如果路径不在 PATH 环境变量中,可以手动将它添加进去。

  1. 使用 npx 运行:如果你只是想在命令行中临时运行 Electron,而不进行全局安装,你可以使用 npx 命令来执行 Electron。在命令行中进入你的项目目录,并执行以下命令:
1
npx electron

这将临时下载并运行最新版本的 Electron。

【安装时报错】npm ERR! RequestError: connect ETIMEDOUT 20.205.243.166:443

1
2
3
4
5
npm ERR! code 1
npm ERR! path D:\Electron\test1\node_modules\electron
npm ERR! command failed
npm ERR! command C:\WINDOWS\system32\cmd.exe /d /s /c node install.js
npm ERR! RequestError: connect ETIMEDOUT 20.205.243.166:443

这个错误表明在尝试安装 Electron 时,npm 遇到了连接超时的问题。

解决此问题的一种常见方法是切换 npm 的下载源。默认情况下,npm 使用的是官方的 npm registry,但有时该源可能遇到连接问题。

你可以尝试将 npm 源切换为国内的源,例如淘宝的 npm 镜像。请按照以下步骤进行操作:

  1. 打开命令行工具,并进入到你的 Electron 项目目录下。

  2. 运行以下命令,将 npm 源切换为淘宝的 npm 镜像:

1
npm config set registry https://registry.npm.taobao.org

这将把 npm 源设置为淘宝的源。

  1. 然后,再次运行 npm install 命令来安装 Electron:
1
npm install

这将使用淘宝的 npm 镜像来下载 Electron,以避免连接问题。

请注意,切换源可能会导致下载速度变慢,但能够解决连接超时的问题。如果仍然遇到问题,请确保你的网络连接正常,并检查防火墙或代理设置是否会阻止 npm 的网络访问。

【安装时报错】npm ERR! RequestError: read ECONNRESET

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
npm ERR! code 1
npm ERR! path C:\Users\15234\AppData\Roaming\npm\node_modules\electron
npm ERR! command failed
npm ERR! command C:\WINDOWS\system32\cmd.exe /d /s /c node install.js
npm ERR! RequestError: read ECONNRESET
npm ERR! at ClientRequest.<anonymous> (C:\Users\15234\AppData\Roaming\npm\node_modules\electron\node_modules\got\source\request-as-event-emitter.js:178:14)
npm ERR! at Object.onceWrapper (node:events:628:26)
npm ERR! at ClientRequest.emit (node:events:525:35)
npm ERR! at origin.emit (C:\Users\15234\AppData\Roaming\npm\node_modules\electron\node_modules\@szmarczak\http-timer\source\index.js:37:11)
npm ERR! at TLSSocket.socketErrorListener (node:_http_client:502:9)
npm ERR! at TLSSocket.emit (node:events:513:28)
npm ERR! at emitErrorNT (node:internal/streams/destroy:151:8)
npm ERR! at emitErrorCloseNT (node:internal/streams/destroy:116:3)
npm ERR! at process.processTicksAndRejections (node:internal/process/task_queues:82:21)

npm ERR! A complete log of this run can be found in: C:\Users\15234\AppData\Local\npm-cache\_logs\2023-08-03T15_13_34_305Z-debug-0.log

这个错误消息表明在尝试安装Electron时,npm遇到了连接错误。具体来说,它显示了“RequestError: read ECONNRESET”错误,这意味着npm无法从服务器读取数据。

以下是一些可能的解决方案:

  1. 检查您的网络连接是否正常。尝试访问其他网站来确保您的网络连接正常。

  2. 尝试清除npm缓存,并重新运行npm install命令:

1
2
npm cache clean --force
npm install
  1. 如果您使用的是代理,请确保npm已正确配置以使用代理服务器。您可以使用以下命令来设置代理:
1
2
npm config set proxy http://proxy.company.com:8080
npm config set https-proxy http://proxy.company.com:8080

请将“proxy.company.com”替换为您的代理服务器地址和端口号。

  1. 如果您使用的是较旧版本的npm,请尝试升级npm版本并重新运行npm install命令。您可以使用以下命令来升级npm版本:
1
npm install -g npm@latest

这将会安装最新版本的npm。然后,您可以再次尝试运行npm install命令,查看是否已经解决了该问题。

请注意,如果您在尝试解决这个问题时对npm进行了更改,请注意备份您的代码和配置文件,并在测试之前仔细检查它们。

【安装时报错】npm ERR! path D:\electron/package.json

1
2
3
4
5
6
7
8
9
10
11
D:\electron>npm install
npm ERR! code ENOENT
npm ERR! syscall open
npm ERR! path D:\electron/package.json
npm ERR! errno -4058
npm ERR! enoent ENOENT: no such file or directory, open 'D:\electron\package.json'
npm ERR! enoent This is related to npm not being able to find a file.
npm ERR! enoent

npm ERR! A complete log of this run can be found in: C:\Users\15234\AppData\Local\npm-cache\_logs\2023-08-03T11_58_08_529Z-debug-0.log

这个错误消息表明在D:\electron目录中找不到package.json文件,因此npm无法运行npm install命令。

请确保您在D:\electron目录中已经创建了一个package.json文件,并指定了您的Electron应用程序的名称、版本、依赖项等信息。如果没有创建该文件,请使用以下命令来创建它:

1
npm init

该命令将会引导您创建一个新的package.json文件,并询问您的应用程序的名称、版本、作者、许可证等信息。完成后,您可以在D:\electron目录下找到生成的package.json文件。

如果您已经创建了package.json文件,请确保文件名和路径名称是正确的,并且该文件位于D:\electron目录下。如果它不在该目录中,请将其移动到该目录下。

如果问题仍然存在,请尝试运行以下命令来清除npm的缓存,并重新运行npm install命令:

1
npm cache clean --force

然后再次尝试运行npm install命令。

请确保您在运行npm install命令之前已经在D:\electron文件夹中创建了一个package.json文件。您可以在该文件中指定您的应用程序的名称、版本、依赖项等信息。

如果您已经创建了package.json文件,那么可能是文件名或路径不正确。请检查文件名和路径是否正确,并确保您正在运行npm install命令的文件夹路径与package.json文件所在的路径相同。

此外,如果您使用的是较旧的npm版本,请尝试升级npm版本,并再次运行npm install命令。您可以使用以下命令来升级npm版本:

1
npm install -g npm@latest

这将会安装最新版本的npm。然后,您可以再次尝试运行npm install命令,查看是否已经解决了该问题。

【安装时报错】npm WARN cleanup Failed to remove some directories

1
2
3
4
5
6
7
8
9
10
11
npm WARN cleanup Failed to remove some directories [
npm WARN cleanup [
npm WARN cleanup 'D:\\Electron\\test1\\node_modules\\extract-zip',
npm WARN cleanup [Error: EPERM: operation not permitted, rmdir 'D:\Electron\test1\node_modules\extract-zip\node_modules'] {
npm WARN cleanup errno: -4048,
npm WARN cleanup code: 'EPERM',
npm WARN cleanup syscall: 'rmdir',
npm WARN cleanup path: 'D:\\Electron\\test1\\node_modules\\extract-zip\\node_modules'
npm WARN cleanup }
npm WARN cleanup ]
npm WARN cleanup ]

在尝试安装 Electron 时,npm 遇到了:

npm WARN cleanup:在清理过程中无法删除某些目录。具体是 D:\Electron\test1\node_modules\extract-zip\node_modules 目录无法被删除,导致了警告。这可能是由于权限不足或其他操作系统相关的问题导致的。

  1. 权限问题:确保你有足够的权限来删除目录。你可以尝试在命令行中以管理员权限运行安装命令,或者手动删除 D:\Electron\test1\node_modules\extract-zip\node_modules 目录。

【运行时报错】npm ERR! Missing script: “start”

1
2
3
4
5
6
7
8
9
10
11
npm ERR! Missing script: "start"
npm ERR!
npm ERR! Did you mean one of these?
npm ERR! npm star # Mark your favorite packages
npm ERR! npm stars # View packages marked as favorites
npm ERR!
npm ERR! To see a list of scripts, run:
npm ERR! npm run

npm ERR! A complete log of this run can be found in:
npm ERR! C:\Users\15234\AppData\Local\npm-cache\_logs\2023-08-03T08_07_03_419Z-debug-0.log

缺少脚本:“start”
错误信息提示缺少名为 “start” 的脚本,同时给出了一些可能的替代命令。

  1. 确认你在正确的目录中运行 npm 命令。你应该在包含 package.json 文件的应用程序根目录下运行 npm 命令。

  2. 检查你的 package.json 文件,确保其中包含了一个名为 “start” 的脚本。 "scripts" 部分应该包含 "start" 字段,并且对应的值应该是你启动应用程序的命令。

示例 package.json 文件中的 "scripts" 部分:

1
2
3
"scripts": {
"start": "electron ."
}

如果你的 package.json 文件中没有 “start” 脚本,你可以根据你的需求添加它。

electronpackagejson

如图,启动应用程序的命令为:

1
npx electron .

【运行时报错】Unable to find Electron app at D:\Electron

1
2
3
4
5
Error launching app
Unable to find Electron app at D:\Electron
Cannot find module 'D:\Electron'
Require stack:
C:\Users\15234VAppData\LocalNnpm-cachel_npx\1323dbbc85759269\node... main.js

errorlauchingapp

根据提供的错误信息,出现了一个与 Electron 应用程序启动相关的错误。错误信息显示了以下内容:

1
2
3
4
5
Error launching app
Unable to find Electron app at D:\Electron
Cannot find module 'D:\Electron'
Require stack:
C:\Users\15234VAppData\LocalNnpm-cachel_npx\1323dbbc85759269\node... main.js

这个错误表明 Electron 无法找到位于 D:\Electron 目录下的应用程序,并且在 D:\Electron 目录中找不到名为 D:\Electron 的模块。

请注意,根据提供的错误信息,似乎存在一个路径错误。错误信息中的路径为 D:\Electron,它被认为是一个模块路径,而不是一个应用程序路径。

请按照以下步骤检查和解决这个问题:

  1. 检查应用程序路径:确认应用程序所在的路径是否正确。检查路径中的拼写错误、缺少斜杠等问题。

  2. 检查启动命令:确保你在启动 Electron 应用程序时使用了正确的命令。常见的启动命令是 electron . 或者 electron main.js。确保命令中的路径和文件名与你的项目结构一致。

  3. 确认应用程序目录结构:在应用程序的目录中,确保存在一个有效的 package.json 文件和一个入口文件(通常命名为 main.jsindex.js)。package.json 文件应包含一个有效的 "main" 入口字段,指向你的应用程序的入口文件。

【运行时报错】Unable to find Electron app at D:\Electron\my-electron-app

1
2
3
Error launching app
Unable to find Electron app at D:\Electron\my-electron-app
Cannot find module 'D:\Electron\my-electron-app\index.js'. Please verify that the package.json has a valid "main" entry

errorlaunchingapp2

错误启动应用程序
无法在 D:\electron\my-electron-app 找到 Electron 应用程序
无法找到模块 ‘D:\electron\my-electron-app\index.js’。请验证 package.json 文件中是否有有效的 “main” 入口

这个错误提示表明在指定的路径 D:\Electron\my-electron-app 下找不到 Electron 应用程序。同时,它还指出需要验证 package.json 文件中是否有有效的 "main" 入口。

请确保以下几点:

  1. 检查指定的路径是否正确,确保你的 Electron 应用程序确实存在于 D:\Electron\my-electron-app 目录中。

  2. 验证 package.json 文件是否存在,并且确保其中包含了有效的 "main" 入口。"main" 入口应该指向 Electron 应用程序的主要启动文件(通常是 index.jsmain.js)。

  3. 可能是 Electron 版本不匹配。
    最新的 Electron 版本可能已经更新,因此旧版本的 Electron 可能无法正常工作。

为了解决这个问题,你可以尝试更新 Electron 的版本,或者使用一个更稳定的版本。以下是更新 package.json 文件的示例,将 Electron 版本更新为最新版本:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
{
"name": "test1",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"start": "electron ."
},
"keywords": [],
"author": "",
"license": "ISC",
"dependencies": {
"electron": "^25.4.0"
}
}

在这个示例中,我将 Electron 版本更新为 "^25.4.0",这是一个较新且稳定的版本。请注意,你也可以使用其他版本号,但建议使用较新的稳定版本。

更新 package.json 文件后,运行 npm install 命令来安装最新版本的 Electron:

1
npm install

然后,尝试再次启动 Electron 应用程序:

1
npm start

示例 package.json 文件:

1
2
3
4
5
6
7
8
9
10
11
{
"name": "my-electron-app",
"version": "1.0.0",
"main": "index.js",
"scripts": {
"start": "electron ."
},
"dependencies": {
"electron": "^25.4.0"
}
}

请确保 "main" 字段的值正确指向你的应用程序的主要启动文件。

  1. 确保你已经在应用程序的根目录下运行了正确的命令来启动 Electron 应用程序。通常,可以使用如下命令来启动应用程序:
1
electron .

这将在当前目录下查找 package.json 文件,并使用 "main" 字段指定的入口文件来启动 Electron 应用程序。

Hello World示例

package.json

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
{
    "dependencies": {
        "electron": "^25.4.0"
    },
    "name": "helloworld",
    "version": "1.0.0",
    "main": "main.js",
    "devDependencies": {},
    "scripts": {
        "start": "electron ."
    },
    "author": "mor",
    "license": "ISC",
    "description": "^25.4.0"
}

index.html

1
2
3
4
5
6
7
8
9
10
11
<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>Hello World</title>
</head>
<body>
    <h1>Hello World!</h1>
</body>
</html>

main.js

1
2
3
4
5
6
7
8
9
10
11
12
const { app, BrowserWindow } = require('electron');
function createWindow() {
    const win = new BrowserWindow({
        width: 800,
        height: 600,
        webPreferences: {
            nodeIntegration: true
        }
    });
    win.loadFile('index.html');
}
app.whenReady().then(createWindow);

参考资料

Electron详解(一):基本介绍
Electron详解(二):基本使用与项目打包
Electron简介、安装、实践
React使用Electron开发桌面端

Ubuntu22.04安装MySQL流程

1、安装服务器端

1
sudo apt-get install mysql-server

2、安装客户端

1
sudo apt-get install mysql-client

3、安装 mysql 相关库

1
sudo apt-get install libmysqlclient-dev

4、安装成功后查看 MySQL 版本

1
mysql -V

查看MySQL版本

5、修改 mysqld.cnf 配置文件

1
sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf

(1)在 [mysqld] 最后一行加入:

1
# skip-grant-tables    <-- add # here

(2)然后点击 ESC ,输入 ‘ :wq ’ 进行保存和退出;如下图所示;

注:如果不修改 mysqld.cnf 配置文件,修改完 MySQL 的用户名和密码后,在进入 MySQL 时可能会有如下错误,即语法错误拒绝被访问:

修改配置文件

6、查看默认安装的 MySQL 的用户名和密码

1
sudo cat /etc/mysql/debian.cnf

修改配置文件

7、登录 MySQL ;

1
mysql -u debian-sys-maint -p    # 换行后输入上述查到的密码
查看默认安装的用户名和密码

查看默认安装的用户名和密码

8、进入 MySQL ;

1
use mysql;

9、刷新权限;

1
flush privileges;

10、修改用户名和密码;

1
ALTER USER 'root'@'localhost' IDENTIFIED WITH caching_sha2_password BY '123456';

11、刷新权限;

1
flush privileges;

12、退出;

1
quit;

13、重启 MySQL ;

1
service mysql restart

14、进入 MySQL ;

1
mysql -u root -p    # 回车后输入自己修改后的密码即可

若以上过程没有效果,进行以下步骤:

15、修改 mysqld.cnf 配置文件

1
sudo vim /etc/mysql/debian.cnf

修改cnf文件

16、保存退出

键入i 进入,修改user和password
键入Esc,输入:wq 保存退出。退出vi后刷新权限退出MySQL,重启

17、刷新权限;

1
flush privileges;

18、退出;

1
quit;

19、重启 MySQL ;

1
service mysql restart

20、进入 MySQL ;

1
mysql -u root -p    # 回车后输入自己修改后的密码即可

修改成功

MySQL中help手册翻译

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
List of all MySQL commands:
Note that all text commands must be first on line and end with ';'
? (\?) Synonym for `help'.
clear (\c) Clear the current input statement.
connect (\r) Reconnect to the server. Optional arguments are db and host.
delimiter (\d) Set statement delimiter.
edit (\e) Edit command with $EDITOR.
ego (\G) Send command to mysql server, display result vertically.
exit (\q) Exit mysql. Same as quit.
go (\g) Send command to mysql server.
help (\h) Display this help.
nopager (\n) Disable pager, print to stdout.
notee (\t) Don't write into outfile.
pager (\P) Set PAGER [to_pager]. Print the query results via PAGER.
print (\p) Print current command.
prompt (\R) Change your mysql prompt.
quit (\q) Quit mysql.
rehash (\#) Rebuild completion hash.
source (\.) Execute an SQL script file. Takes a file name as an argument.
status (\s) Get status information from the server.
system (\!) Execute a system shell command.
tee (\T) Set outfile [to_outfile]. Append everything into given outfile.
use (\u) Use another database. Takes database name as argument.
charset (\C) Switch to another charset. Might be needed for processing binlog with multi-byte charsets.
warnings (\W) Show warnings after every statement.
nowarning (\w) Don't show warnings after every statement.
resetconnection(\x) Clean session context.
query_attributes Sets string parameters (name1 value1 name2 value2 ...) for the next query to pick up.
ssl_session_data_print Serializes the current SSL session data to stdout or file

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
所有MySQL命令的列表:
请注意,所有文本命令都必须位于第一行,并以“;”结尾
? (\?)“帮助”的同义词。
clear(\c)清除当前输入语句。
connect(\r)重新连接到服务器。可选参数为db和host。
delimiter(\d)设置语句分隔符。
edit(\e)使用$EDITOR编辑命令。
ego(\G)向mysql服务器发送命令,垂直显示结果。
exit(\q)退出mysql。与退出相同。
go(\g)将命令发送到mysql服务器。
help(\h)显示此帮助。
nopage(\n)禁用寻呼机,打印到标准输出。
notee(\t)不要写入outfile。
寻呼机(\P)设置pager[到页面]。通过PAGER打印查询结果。
print(\p)打印当前命令。
prompt(\R)更改您的mysql提示符。
quit(\q)退出mysql。
rehash(\#)重新生成完成哈希。
source(\.)执行SQL脚本文件。将文件名作为参数。
status(\s)从服务器获取状态信息。
system(\!)执行系统shell命令。
tee(\T)设置输出文件[to_outfile]。将所有内容附加到给定的外文件中。
use(\u)使用另一个数据库。将数据库名称作为参数。
charset(\C)切换到另一个字符集。可能需要处理具有多字节字符集的binlog。
warnings(\W)在每条语句后显示警告。
nowarning(\w)不要在每条语句后都显示警告。
resetconnection(\x)清除会话上下文。
query_attributes为下一个要提取的查询设置字符串参数(名称1值1名称2值2…)。
ssl_session_data_print将当前ssl会话数据序列化到stdout或文件

其他命令:

更新

1
sudo apt update   

免密码进入mysql:

1
sudo mysql -uroot

参考教程:

Ubuntu 20.04 + mysql 8.0.27 用户名和密码修改

Java对象和类

对象与类

面向对象程序设计概述

传统的结构化程序设计通过设计一系列的过程(即算法)来求解问题。面向对象程序设计(object-oriented programming , OOP) 将数据放在第一位 , 然后再考虑操作数据的算法 , 更加适合解决规模较大的问题 .

由类构造(construct)对象的过程称为创建类的实例。
封装(encapsulation有时称为数据隐藏)是处理对象的一个重要概念。从形式上看,封装就是将数据和行为组合在一个包中,并对对象的使用者隐藏具体的实现方式。对象中的数据称为实例字段,操作数据的过程称为方法。

OOP可以通过扩展其他类来构建新类。在扩展一个已有的类时,这个扩展后的新类具有被扩展的类的全部属性和方法。通过扩展一个类来建立另外一个类的过程称为继承。

类包含的实例字段通常属于某个类类型 .

类之间的关系

  • 依赖(uses-a)
  • 聚合(has-a)
  • 继承(is-a)

依赖:一个类的方法 使用或者操纵另一个类的对象
聚合:类A的对象包含类B的对象
继承:一个更特殊的类与一个更一般的类之间的关系

对象

对象中的数据称为实例字段 , 操作数据的过程称为方法 . 作为一个类的实例 , 特定对象都有一组特定的实例字段值 . 这些值的集合就是这个对象的当前状态 .

封装(数据隐藏 encapsulation)是处理对象的一个重要概念

对象的状态:对着中保存着的描述当前状况的信息。对象的状态并不能完全描述一个对象,对象状态的改变必须通过调用方法实现。对象的状态影响它的行为。

所有的Java对象都是在堆中构造的 .

预定义类

对象与对象变量

构造对象 :

使用构造器(或构造函数)构造新实例 : 构造器的名字应该与类名相同

1
2
3
4
5
6
7
8
9
10
11
12
//构造一个Date对象需要在构造器前面加上 new 操作符 : 
new Date();
//可以将对象放在一个变量中
//表达式 new Date()构造了一个Date类型的对象,它的值是对新创建对象的一个引用,这个引用储存在变量deadLine中
Date birthday = new Date();

//可以将这个对象传递给一个方法
System.out.println(new Date());
//也可以对刚创建的对象应用一个方法
//Date类中有一个 toString 方法,返回日期的字符串描述
String s = new Date().toString();

构造对象变量 :

1
Date deadLine;

定义了一个对象变量 deadLine , 它可以引用 Date 类型的对象 , 但变量 deadLine 不是一个对象 , 也没有引用任何对象 , 此时还不能在这个变量上使用任何 Date 方法 .

变量对象并没有实际包含一个对象 , 它只是引用一个对象 . 任何对象变量的值都是对储存在另外一个地方的某个对象的引用 .

可以显示地将对象变量设置为 null , 指示这个对象变量目前没有引用任何对象 .

必须首先初始化变量 deadLine

1
2
3
4
//可以引用一个新构造的对象
deadLine = new Date();
//可以设置这个变量让它引用一个已有的对象 :
deadLine = birthday;

更改器方法与访问器方法(待整理)

更改器方法
访问器方法:访问器方法访问器方法 (字段访问器 : 只返回实例字段值)

自定义类

Employee类

1
2
3
4
5
6
7
8
9
10
class ClassName{
//field1(字段)
//fiedl2
//...
//constructor1(构造函数)
//constructor2
//...
//method1(方法)
//method2
}

构造器(待整理)

构造器总是结合 new 运算符来调用 . 不能对一个已经存在的对象调用构造器来达到重新设置实例字段的目的 .

null引用(待整理)

一个对象变量包含一个对象的引用 , 或者包含一个特殊值null , 后者表示没有引用任何对象 .

如果对null值应用一个方法 , 会产生一个 NullPointerException (空指针)异常 .

解决办法 :

  1. 把null参数转换为一个适当的非null值

    1
    if (n--null) name = "unknown";else name = n;
  2. 拒绝null参数

    1
    2
    3
    4
    5
    6
    public Employee(String n,double s, int year,int month,int day)
    {
    Objects.requireNonNull(n,"The name cannot be null");
    name="n";
    ...
    }

隐式参数与显示参数(待整理)

隐式参数又称为方法调用的目标或者接收者

封装(待整理)

私有方法(待整理)

public : 任何类的任何方法都可以用这些方法

private : 确保只有Employee类自身的方法能够访问这些实例字段 , 而其他类的方法不能够读写这些字段 .

final实例字段(待整理)

可以将实例字段定义为final . 这样的字段必须在构造对象时初始化

final 修饰符对于基本类型或者不可变类的字段尤其有用(如果类中的所有方法都不会改变其对象 , 这样的类就是不可变的类)

final 关键字只是表示储存在 evaluations 变量中的对象引用不会再指示另一个不同的StringBuilder对象

静态字段与静态方法(待整理)

静态字段(类字段)

定义为 static 的字段 , 每个类只有一个

非静态字段(待整理)

每个对象都有自己的一个副本

静态常量(待整理)

静态方法(待整理)

不在对象上执行的方法 , 没有隐式参数 , 没有this参数的方法

工厂方法(待整理)

静态工厂方法构造对象

main(待整理)

方法参数(待整理)

对象构造

重载(待整理)

多个方法有不同的名字 , 不同的参数 , 便出现了重载 . 编译器必须挑选出具体的调用哪个方法 . 它用各个方法首部中的参数类型与特定方法调用中所使用的值类型进行匹配 , 来选出正确的方法 .

查找匹配的过程被称为重载解析 .

显式字段初始化(待整理)

默认字段初始化(待整理)

如果在构造器中中没有显式地为字段设置初值 , 会被自动地赋为默认值 : 数值为 0 , 布尔值为 false , 对象引用为 null

初始化块(待整理)

无参数的构造器(待整理)

由无参数的构造器创建对象时 , 对象的状态会设置为适当的默认值 .

有参数的构造器(待整理)

调用另一个构造器(this关键字)(待整理)

包命名

使用包的主要原因是确保类名的唯一性

类的导入

一个类可以使用所属包中的所有类 , 以及其他包中的公共类 .

1
2
3
4
5
6
//1.使用完全限定名
java.time.LocalDate today = java.time.LocalDate.new();
//2.使用 import 语句导入一个特定的类或整个包
//只能使用*导入一个包
import java.time.*;
import java.time.LocalDate;

静态导入

有一种 import 语句允许导入静态方法和静态字段

1
2
3
4
5
6
7
8
//例如在源文件顶部添加一条指令 :
import static java.lang.System.*;
//就可以使用System类的静态方法和静态字段而不必加类名前缀
out.println("Goodbye,World!");
exit(0);

//还可以导入特定的方法或字段
import static java.lang.System.out;

包访问

标记为 public 的部分可以由任意类使用 , 标记为 private 的部分只能由定义他们的类使用 . 如果没有指定 public 和 private , 这个部分(类,方法或变量) 可以被同一个包中的所有方法访问 .

JAR文件(待整理)

文档注释

javadoc 由源文件生成一个HTML文档 , 在源代码中加以特殊界定符 /** 开始的注释

每个 /**...*/ 文档注释包含标记以及之后紧跟着的自由格式文本 . 自由格式文本的第一句应该是一个概要性的句子

标记以 @ 开始

类注释

类注释必须放在 import 语句之后 , 类定义之前

方法注释

方法注释必须放在所描述的方法之前

除了通用标记外 , 还可以使用 :

这个标记将给当前方法的 “ parameters “ (参数) 部分添加一个条目 . 这个描述可以占很多行 , 并且可以使用HTML标记 . 一个方法的所有的 @param 标记必须放在一起

1
@param variable description

字段注释(待整理)

通用注释

包注释

注释抽取

You Found Me.

支付宝
微信