java - Java ZipInputStream 在线程中中断,但不在主线程中
问题描述
我无法解决这个问题。以下代码完美运行:
public static void main(String[] args) {
//new Thread(() -> {
try {
Path zipFile = Paths.get("C:\\path\\to\\zipfile.zip");
Path outDir = Files.createDirectories(Paths.get("C:\\path\\to\\outDir"));
try (ZipInputStream inputStream = new ZipInputStream(Files.newInputStream(zipFile))) {
ZipEntry entry;
while ((entry = inputStream.getNextEntry()) != null) {
Path outPath = outDir.resolve(entry.getName());
if (entry.isDirectory()) {
if (!Files.exists(outPath)) {
Files.createDirectory(outPath);
}
} else {
try (OutputStream outputStream = Files.newOutputStream(outPath)) {
inputStream.transferTo(outputStream);
}
}
System.out.println(entry.getName());
}
}
} catch (IOException e) {
e.printStackTrace();
}
//}).start();
}
但是,取消注释线程代码会导致程序每次都挂在完全相同的文件上:
public static void main(String[] args) {
new Thread(() -> {
try {
Path zipFile = Paths.get("C:\\path\\to\\zipfile.zip");
Path outDir = Files.createDirectories(Paths.get("C:\\path\\to\\outDir"));
try (ZipInputStream inputStream = new ZipInputStream(Files.newInputStream(zipFile))) {
ZipEntry entry;
while ((entry = inputStream.getNextEntry()) != null) {
Path outPath = outDir.resolve(entry.getName());
if (entry.isDirectory()) {
if (!Files.exists(outPath)) {
Files.createDirectory(outPath);
}
} else {
try (OutputStream outputStream = Files.newOutputStream(outPath)) {
inputStream.transferTo(outputStream);
}
}
System.out.println(entry.getName());
}
}
} catch (IOException e) {
e.printStackTrace();
}
}).start();
}
如果我尝试调试程序,它可以正常工作,只有在非调试模式下运行时,才会在线程内发生这种情况。此外,使用 Windows Explorer 和 7-Zip 可以毫无问题地提取 zip。我正在接近头发拉出水平,非常感谢任何帮助。
作为参考,我用于测试的 zip 文件(我正在开发 7 天的 mod 启动器)可以在这里找到:https ://github.com/KhaineGB/DarknessFallsBBM45/archive/refs/heads/大师.zip
解决方案
推荐阅读
- linux - Visual Studio 的“Docker 调试”无法安装 linux 包,但是发布/发布解决并安装包
- java - 如何打印括号内的字符串列表?
- variables - Rust 服务器必须保存变量的更新值
- python - Doc2Vec 和 Word2Vec 的不同余弦相似度系数
- python - 错误> 无法从部分初始化的模块“openpyxl”导入名称“load_workbook”
- sql-server - 使用 powershell 在 SQL Server 上更改用户的密码
- c# - c# if 语句的简写格式
- reactjs - React 和 Typescript:如何扩展通用组件道具?
- javascript - 如何将两种类型分配给猫鼬模式中的特定键?
- python - 正则表达式在组合时不起作用