🐛 修复 BUG 当没有配置文件打开软件报错问题,解决合并冲突,✏️ 修正错别字

This commit is contained in:
gewuyou 2023-08-25 23:49:41 +08:00
parent 631c7b82f2
commit 1bd9e17b60
5 changed files with 146 additions and 132 deletions

View File

@ -1,17 +1,14 @@
package org.jcnc.jnotepad.app.config;
import javafx.scene.control.MenuItem;
import javafx.scene.input.KeyCombination;
import org.jcnc.jnotepad.app.entity.ShortcutKey;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.jcnc.jnotepad.exception.AppException;
import org.jcnc.jnotepad.tool.LogUtil;
import org.jcnc.jnotepad.tool.PopUpUtil;
import org.jcnc.jnotepad.ui.menu.JNotepadMenuBar;
import org.slf4j.Logger;
import java.io.*;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
import static org.jcnc.jnotepad.constants.AppConstants.CONFIG_NAME;
import static org.jcnc.jnotepad.constants.TextConstants.JNOTEPAD_CONFIG;
@ -63,6 +60,11 @@ public abstract class LoadJnotepadConfig<T> {
logger.info("未检测到配置文件!");
// 不存在则创建
createConfig();
try {
loadConfig(new FileInputStream(CONFIG_NAME));
} catch (FileNotFoundException ex) {
throw new AppException(ex.getMessage());
}
}
}
@ -76,55 +78,56 @@ public abstract class LoadJnotepadConfig<T> {
protected abstract T parseConfig(InputStream inputStream);
private void createConfig() {
List<ShortcutKey> shortcutKeyList = getShortcutKeys();
JnotepadConfig.getInstance().setShortcutKeyList(shortcutKeyList);
for (ShortcutKey shortcutKey : shortcutKeyList) {
// 保证json的key必须和变量名一致
MenuItem menuItem = JNotepadMenuBar.getMenuBar().getItemMap().get(shortcutKey.getButtonName());
String shortKeyValue = shortcutKey.getShortcutKeyValue();
if ("".equals(shortKeyValue) || Objects.isNull(menuItem)) {
continue;
}
// 动态添加快捷键
menuItem.setAccelerator(KeyCombination.keyCombination(shortKeyValue));
}
// List<ShortcutKey> shortcutKeyList = getShortcutKeys();
// JnotepadConfig.getInstance().setShortcutKeyList(shortcutKeyList);
// for (ShortcutKey shortcutKey : shortcutKeyList) {
// // 保证json的key必须和变量名一致
// MenuItem menuItem = JNotepadMenuBar.getMenuBar().getItemMap().get(shortcutKey.getButtonName());
// String shortKeyValue = shortcutKey.getShortcutKeyValue();
// if ("".equals(shortKeyValue) || Objects.isNull(menuItem)) {
// continue;
// }
// // 动态添加快捷键
// menuItem.setAccelerator(KeyCombination.keyCombination(shortKeyValue));
// }
try (BufferedWriter writer = new BufferedWriter(new FileWriter(CONFIG_NAME))) {
writer.write(JNOTEPAD_CONFIG);
} catch (IOException e) {
PopUpUtil.errorAlert("错误", "读写错误", "配置文件读写错误!");
}
LocalizationConfig.getLocalizationConfig().initLocalizationConfig();
}
/**
* 获取快捷键集合
*
* @return java.util.List<org.jcnc.jnotepad.app.entity.ShortcutKey> 快捷键集合
* @since 2023/8/24 14:19
*/
private static List<ShortcutKey> getShortcutKeys() {
List<ShortcutKey> shortcutKeyList = new ArrayList<>();
// 打开文件
ShortcutKey shortcutKeyOfOpen = new ShortcutKey("openItem", "ctrl+o");
// 新建
ShortcutKey shortcutKeyOfNew = new ShortcutKey("newItem", "ctrl+n");
// 保存
ShortcutKey shortcutKeyOfSave = new ShortcutKey("saveItem", "ctrl+s");
// 保存作为
ShortcutKey shortcutKeyOfSaveAs = new ShortcutKey("saveAsItem", "ctrl+shift+s");
// 打开配置文件
ShortcutKey shortcutKeyOfOpenConfig = new ShortcutKey("openConfigItem", "alt+s");
shortcutKeyList.add(shortcutKeyOfOpen);
shortcutKeyList.add(shortcutKeyOfNew);
shortcutKeyList.add(shortcutKeyOfSave);
shortcutKeyList.add(shortcutKeyOfSaveAs);
shortcutKeyList.add(shortcutKeyOfOpenConfig);
return shortcutKeyList;
}
// /**
// * 获取快捷键集合
// *
// * @return java.util.List<org.jcnc.jnotepad.app.entity.ShortcutKey> 快捷键集合
// * @since 2023/8/24 14:19
// */
// private static List<ShortcutKey> getShortcutKeys() {
// List<ShortcutKey> shortcutKeyList = new ArrayList<>();
// // 打开文件
// ShortcutKey shortcutKeyOfOpen = new ShortcutKey("openItem", "ctrl+o");
//
// // 新建
// ShortcutKey shortcutKeyOfNew = new ShortcutKey("newItem", "ctrl+n");
//
// // 保存
// ShortcutKey shortcutKeyOfSave = new ShortcutKey("saveItem", "ctrl+s");
//
// // 保存作为
// ShortcutKey shortcutKeyOfSaveAs = new ShortcutKey("saveAsItem", "ctrl+shift+s");
//
// // 打开配置文件
// ShortcutKey shortcutKeyOfOpenConfig = new ShortcutKey("openConfigItem", "alt+s");
//
// shortcutKeyList.add(shortcutKeyOfOpen);
// shortcutKeyList.add(shortcutKeyOfNew);
// shortcutKeyList.add(shortcutKeyOfSave);
// shortcutKeyList.add(shortcutKeyOfSaveAs);
// shortcutKeyList.add(shortcutKeyOfOpenConfig);
// return shortcutKeyList;
// }
/**
* 加载配置文件

View File

@ -7,9 +7,8 @@ import java.io.*;
import java.nio.charset.StandardCharsets;
import java.util.Properties;
import static org.jcnc.jnotepad.constants.AppConstants.CH_LANGUAGE_PACK_NAME;
import static org.jcnc.jnotepad.constants.AppConstants.EN_LANGUAGE_PACK_NAME;
import static org.jcnc.jnotepad.constants.TextConstants.TEXT_WRAP;
import static org.jcnc.jnotepad.constants.AppConstants.APP_NAME;
import static org.jcnc.jnotepad.constants.TextConstants.*;
/**
* 本地化配置文件
@ -42,33 +41,34 @@ public class LocalizationConfig {
InputStreamReader reader = new InputStreamReader(inputStream, StandardCharsets.UTF_8);
properties.load(reader);
} catch (IOException e) {
logger.info("未检测到本地化语言包!");
// 如果读取出错则调用初始化方法
initializePropertiesFile();
}
logger.info("初始化本地化语言包成功!");
title = properties.getProperty("title", "JNotepad");
sava = properties.getProperty("SAVA");
file = properties.getProperty("FILE");
newly = properties.getProperty("NEW");
open = properties.getProperty("OPEN");
savaAs = properties.getProperty("SAVA_AS");
set = properties.getProperty("SET");
wordWrap = properties.getProperty("WORD_WRAP");
plugin = properties.getProperty("PLUGIN");
addPlugin = properties.getProperty("ADD_PLUGIN");
statistics = properties.getProperty("STATISTICS");
openConfigurationFile = properties.getProperty("OPEN_CONFIGURATION_FILE");
top = properties.getProperty("TOP");
language = properties.getProperty("LANGUAGE");
chinese = properties.getProperty("CHINESE");
english = properties.getProperty("ENGLISH");
title = properties.getProperty(TITLE, APP_NAME);
sava = properties.getProperty(SAVE);
file = properties.getProperty(FILE);
newly = properties.getProperty(NEW);
open = properties.getProperty(OPEN);
savaAs = properties.getProperty(SAVE_AS);
set = properties.getProperty(SET);
wordWrap = properties.getProperty(WORD_WRAP);
plugin = properties.getProperty(PLUGIN);
addPlugin = properties.getProperty(ADD_PLUGIN);
statistics = properties.getProperty(STATISTICS);
openConfigurationFile = properties.getProperty(OPEN_CONFIGURATION_FILE);
top = properties.getProperty(TOP);
language = properties.getProperty(LANGUAGE);
chinese = properties.getProperty(UPPER_CHINESE);
english = properties.getProperty(UPPER_ENGLISH);
textWrap = properties.getProperty(TEXT_WRAP, "true");
newFile = properties.getProperty("NEW_FILE");
unknown = properties.getProperty("UNKNOWN");
row = properties.getProperty("ROW");
column = properties.getProperty("COLUMN");
wordCount = properties.getProperty("WORD_COUNT");
encode = properties.getProperty("ENCODE");
newFile = properties.getProperty(NEW_FILE);
unknown = properties.getProperty(UNKNOWN);
row = properties.getProperty(ROW);
column = properties.getProperty(COLUMN);
wordCount = properties.getProperty(WORD_COUNT);
encode = properties.getProperty(ENCODE);
}
/**
@ -103,52 +103,52 @@ public class LocalizationConfig {
private void setChineseLanguagePack() {
properties.clear();
// 设置默认属性
properties.setProperty("TITLE", "JNotepad");
properties.setProperty("NEW_FILE", "新建文件");
properties.setProperty("SAVA", "保存");
properties.setProperty("FILE", "文件");
properties.setProperty("NEW", "新建");
properties.setProperty("OPEN", "打开");
properties.setProperty("SAVA_AS", "另存为");
properties.setProperty("SET", "设置");
properties.setProperty("WORD_WRAP", "自动换行");
properties.setProperty("OPEN_CONFIGURATION_FILE", "打开配置文件");
properties.setProperty("PLUGIN", "插件");
properties.setProperty("ADD_PLUGIN", "增加插件");
properties.setProperty("STATISTICS", "统计字数");
properties.setProperty("ROW", "行数");
properties.setProperty("COLUMN", "列数");
properties.setProperty("WORD_COUNT", "字数");
properties.setProperty("ENCODE", "编码");
properties.setProperty("TOP", "窗口置顶");
properties.setProperty("LANGUAGE", "语言");
properties.setProperty("CHINESE", "中文");
properties.setProperty("ENGLISH", "英文");
properties.setProperty(TITLE, APP_NAME);
properties.setProperty(NEW_FILE, "新建文件");
properties.setProperty(SAVE, "保存");
properties.setProperty(FILE, "文件");
properties.setProperty(NEW, "新建");
properties.setProperty(OPEN, "打开");
properties.setProperty(SAVE_AS, "另存为");
properties.setProperty(SET, "设置");
properties.setProperty(WORD_WRAP, "自动换行");
properties.setProperty(OPEN_CONFIGURATION_FILE, "打开配置文件");
properties.setProperty(PLUGIN, "插件");
properties.setProperty(ADD_PLUGIN, "增加插件");
properties.setProperty(STATISTICS, "统计字数");
properties.setProperty(ROW, "行数");
properties.setProperty(COLUMN, "列数");
properties.setProperty(WORD_COUNT, "字数");
properties.setProperty(ENCODE, "编码");
properties.setProperty(TOP, "窗口置顶");
properties.setProperty(LANGUAGE, "语言");
properties.setProperty(UPPER_CHINESE, "中文");
properties.setProperty(UPPER_ENGLISH, "英文");
}
private void setEnglishLanguagePack() {
properties.clear();
properties.setProperty("TITLE", "JNotepad");
properties.setProperty("NEW_FILE", "New File");
properties.setProperty("SAVA", "Save");
properties.setProperty("FILE", "File");
properties.setProperty("NEW", "New");
properties.setProperty("OPEN", "Open");
properties.setProperty("SAVA_AS", "Save As");
properties.setProperty("SET", "Settings");
properties.setProperty("WORD_WRAP", "Word Wrap");
properties.setProperty("OPEN_CONFIGURATION_FILE", "Open Configuration File");
properties.setProperty("PLUGIN", "Plugins");
properties.setProperty("ADD_PLUGIN", "Add Plugin");
properties.setProperty("STATISTICS", "Word Count");
properties.setProperty("ROW", "Row");
properties.setProperty("COLUMN", "Column");
properties.setProperty("WORD_COUNT", "Word Count");
properties.setProperty("ENCODE", "Encoding");
properties.setProperty("TOP", "Window Top");
properties.setProperty("LANGUAGE", "Language");
properties.setProperty("CHINESE", "Chinese");
properties.setProperty("ENGLISH", "English");
properties.setProperty(TITLE, APP_NAME);
properties.setProperty(NEW_FILE, "New File");
properties.setProperty(SAVE, "Save");
properties.setProperty(FILE, "File");
properties.setProperty(NEW, "New");
properties.setProperty(OPEN, "Open");
properties.setProperty(SAVE_AS, "Save As");
properties.setProperty(SET, "Settings");
properties.setProperty(WORD_WRAP, "Word Wrap");
properties.setProperty(OPEN_CONFIGURATION_FILE, "Open Configuration File");
properties.setProperty(PLUGIN, "Plugins");
properties.setProperty(ADD_PLUGIN, "Add Plugin");
properties.setProperty(STATISTICS, "Word Count");
properties.setProperty(ROW, "Row");
properties.setProperty(COLUMN, "Column");
properties.setProperty(WORD_COUNT, "Word Count");
properties.setProperty(ENCODE, "Encoding");
properties.setProperty(TOP, "Window Top");
properties.setProperty(LANGUAGE, "Language");
properties.setProperty(UPPER_CHINESE, "Chinese");
properties.setProperty(UPPER_ENGLISH, "English");
}
private String textWrap;
@ -192,6 +192,9 @@ public class LocalizationConfig {
private String newFile;
/// EncodingDetector 文本常量
/**
* 未知
*/
private String unknown;
/// JNotepadStatusBox

View File

@ -18,20 +18,12 @@ public class AppConstants {
* 初始高度
*/
public static final double SCREEN_LENGTH = 600;
public static final String APP_NAME = "JNotepad";
/**
* logo地址
*/
public static final String APP_ICON = "/img/icon.png";
/**
* 中文语言包
*/
public static final String CH_LANGUAGE_PACK_NAME = "ch_language_pack.txt";
/**
* 英文语言包
*/
public static final String EN_LANGUAGE_PACK_NAME = "en_language_pack.txt";
/**
* 配置文件名
*/

View File

@ -24,6 +24,28 @@ public class TextConstants {
*/
public static final String TEXT_WRAP = "text.wrap";
public static final String TITLE = "title";
public static final String SAVE = "SAVE";
public static final String FILE = "FILE";
public static final String NEW = "NEW";
public static final String OPEN = "OPEN";
public static final String SAVE_AS = "SAVE_AS";
public static final String SET = "SET";
public static final String WORD_WRAP = "WORD_WRAP";
public static final String PLUGIN = "PLUGIN";
public static final String ADD_PLUGIN = "ADD_PLUGIN";
public static final String STATISTICS = "STATISTICS";
public static final String OPEN_CONFIGURATION_FILE = "OPEN_CONFIGURATION_FILE";
public static final String TOP = "TOP";
public static final String LANGUAGE = "LANGUAGE";
public static final String UPPER_CHINESE = "CHINESE";
public static final String UPPER_ENGLISH = "ENGLISH";
public static final String NEW_FILE = "NEW_FILE";
public static final String UNKNOWN = "UNKNOWN";
public static final String ROW = "ROW";
public static final String COLUMN = "COLUMN";
public static final String WORD_COUNT = "WORD_COUNT";
public static final String ENCODE = "ENCODE";
/// Config 文本常量

View File

@ -3,16 +3,13 @@ package org.jcnc.jnotepad.tool;
import com.ibm.icu.text.CharsetDetector;
import com.ibm.icu.text.CharsetMatch;
import org.jcnc.jnotepad.constants.TextConstants;
import org.jcnc.jnotepad.app.config.LocalizationConfig;
import org.slf4j.Logger;
import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets;
import static org.jcnc.jnotepad.constants.TextConstants.UNKNOWN;
/**
@ -73,13 +70,10 @@ public class EncodingDetector {
*/
public static Charset detectEncodingCharset(File file) {
String charset = detectEncoding(file);
if (charset.equals(localizationConfig.getUnknown())) {
try {
assert charset != null;
return Charset.forName(charset);
} catch (Exception e) {
return Charset.defaultCharset();
}
return Charset.forName(charset);
}
}