!57 fix: #I7XAY8 修复另存时可能失败的问题

Merge pull request !57 from songdragon/fix-I7XAY8
This commit is contained in:
Luke 2023-08-30 16:02:35 +00:00 committed by Gitee
commit 45b26c6de1
No known key found for this signature in database
GPG Key ID: 173E9B9CA92EEF8F
3 changed files with 35 additions and 14 deletions

View File

@ -75,13 +75,11 @@ public class SaveFile implements EventHandler<ActionEvent> {
File file = fileChooser.showSaveDialog(UiUtil.getAppWindow()); File file = fileChooser.showSaveDialog(UiUtil.getAppWindow());
if (file != null) { if (file != null) {
LogUtil.getLogger(currentClass).info("正在保存文件:{}", file.getName()); LogUtil.getLogger(currentClass).info("正在保存文件:{}", file.getName());
selectedTab.save(); selectedTab.save(file);
// 将保存后的文件设置为已关联 // 将保存后的文件设置为已关联
selectedTab.setRelevance(true); selectedTab.setRelevance(true);
// 更新Tab页标签上的文件名 // 更新Tab页标签上的文件名
selectedTab.setText(file.getName()); selectedTab.setText(file.getName());
// 将文件对象保存到Tab页的UserData中
selectedTab.setUserData(file);
} }
} }
} }

View File

@ -7,6 +7,7 @@ import org.jcnc.jnotepad.tool.LogUtil;
import org.jcnc.jnotepad.tool.SingletonUtil; import org.jcnc.jnotepad.tool.SingletonUtil;
import org.jcnc.jnotepad.tool.UiUtil; import org.jcnc.jnotepad.tool.UiUtil;
import org.jcnc.jnotepad.ui.root.center.tab.JNotepadTab; import org.jcnc.jnotepad.ui.root.center.tab.JNotepadTab;
import org.slf4j.Logger;
import java.io.BufferedWriter; import java.io.BufferedWriter;
import java.io.File; import java.io.File;
@ -17,6 +18,8 @@ import java.io.IOException;
* @author 许轲 * @author 许轲
*/ */
public class LineNumberTextArea extends BorderPane { public class LineNumberTextArea extends BorderPane {
private static final Logger logger=LogUtil.getLogger(LineNumberTextArea.class);
static final int[] SIZE_TABLE = {9, 99, 999, 9999, 99999, 999999, 9999999, static final int[] SIZE_TABLE = {9, 99, 999, 9999, 99999, 999999, 9999999,
99999999, 999999999, Integer.MAX_VALUE}; 99999999, 999999999, Integer.MAX_VALUE};
private static final int MIN_LINE_NUMBER_WIDTH = 30; private static final int MIN_LINE_NUMBER_WIDTH = 30;
@ -72,10 +75,16 @@ public class LineNumberTextArea extends BorderPane {
*/ */
public void save() { public void save() {
JNotepadTab tab = UiUtil.getJnotepadtab(); JNotepadTab tab = UiUtil.getJnotepadtab();
if (tab != null) { if (tab == null) {
return;
}
File file = (File) tab.getUserData(); File file = (File) tab.getUserData();
String newValue = this.mainTextArea.getText(); String newValue = this.mainTextArea.getText();
if (file != null) { if (file == null) {
// 文件对象不存在
logger.warn("Tab上没有关联文件信息");
return;
}
try (BufferedWriter writer = new BufferedWriter(new FileWriter(file, tab.getCharset()))) { try (BufferedWriter writer = new BufferedWriter(new FileWriter(file, tab.getCharset()))) {
writer.write(newValue); writer.write(newValue);
LogUtil.getLogger(this.getClass()).info("正在自动保存---"); LogUtil.getLogger(this.getClass()).info("正在自动保存---");
@ -83,8 +92,6 @@ public class LineNumberTextArea extends BorderPane {
LogUtil.getLogger(this.getClass()).info("已忽视IO异常!"); LogUtil.getLogger(this.getClass()).info("已忽视IO异常!");
} }
} }
}
}
private void updateLineNumberWidth() { private void updateLineNumberWidth() {
int numOfLines = mainTextArea.getParagraphs().size(); int numOfLines = mainTextArea.getParagraphs().size();

View File

@ -4,6 +4,7 @@ import javafx.scene.control.Tab;
import org.jcnc.jnotepad.controller.config.AppConfigController; import org.jcnc.jnotepad.controller.config.AppConfigController;
import org.jcnc.jnotepad.ui.module.LineNumberTextArea; import org.jcnc.jnotepad.ui.module.LineNumberTextArea;
import java.io.File;
import java.nio.charset.Charset; import java.nio.charset.Charset;
/** /**
@ -70,7 +71,22 @@ public class JNotepadTab extends Tab {
this.charset = charset; this.charset = charset;
} }
/**
* 保存文件内容
*/
public void save() { public void save() {
this.lineNumberTextArea.save(); this.lineNumberTextArea.save();
} }
/**
* 保存为指定文件
* @param file 新文件
*/
public void save(File file) {
if (file == null) {
return;
}
this.setUserData(file);
save();
}
} }