Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
weixin_41695661
jadx
提交
dcf4a7c4
J
jadx
项目概览
weixin_41695661
/
jadx
与 Fork 源项目一致
从无法访问的项目Fork
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
J
jadx
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
未验证
提交
dcf4a7c4
编写于
6月 01, 2022
作者:
S
Skylot
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
fix(gui): try to resolve some causes of memory leak
上级
9ba07b98
变更
4
隐藏空白更改
内联
并排
Showing
4 changed file
with
39 addition
and
12 deletion
+39
-12
jadx-gui/src/main/java/jadx/gui/ui/MainWindow.java
jadx-gui/src/main/java/jadx/gui/ui/MainWindow.java
+1
-0
jadx-gui/src/main/java/jadx/gui/ui/TabbedPane.java
jadx-gui/src/main/java/jadx/gui/ui/TabbedPane.java
+19
-12
jadx-gui/src/main/java/jadx/gui/ui/dialog/SearchDialog.java
jadx-gui/src/main/java/jadx/gui/ui/dialog/SearchDialog.java
+2
-0
jadx-gui/src/main/java/jadx/gui/utils/UiUtils.java
jadx-gui/src/main/java/jadx/gui/utils/UiUtils.java
+17
-0
未找到文件。
jadx-gui/src/main/java/jadx/gui/ui/MainWindow.java
浏览文件 @
dcf4a7c4
...
@@ -437,6 +437,7 @@ public class MainWindow extends JFrame {
...
@@ -437,6 +437,7 @@ public class MainWindow extends JFrame {
LogCollector
.
getInstance
().
reset
();
LogCollector
.
getInstance
().
reset
();
wrapper
.
close
();
wrapper
.
close
();
tabbedPane
.
closeAllTabs
();
tabbedPane
.
closeAllTabs
();
UiUtils
.
resetClipboardOwner
();
System
.
gc
();
System
.
gc
();
}
}
...
...
jadx-gui/src/main/java/jadx/gui/ui/TabbedPane.java
浏览文件 @
dcf4a7c4
...
@@ -373,49 +373,56 @@ public class TabbedPane extends JTabbedPane {
...
@@ -373,49 +373,56 @@ public class TabbedPane extends JTabbedPane {
jumps
.
reset
();
jumps
.
reset
();
curTab
=
null
;
curTab
=
null
;
lastTab
=
null
;
lastTab
=
null
;
FocusManager
.
reset
();
}
}
@Nullable
@Nullable
public
Component
getFocusedComp
()
{
public
Component
getFocusedComp
()
{
return
FocusManager
.
isActive
()
?
FocusManager
.
focusedComp
:
null
;
return
FocusManager
.
getFocusedComp
()
;
}
}
private
static
class
FocusManager
implements
FocusListener
{
private
static
class
FocusManager
implements
FocusListener
{
static
boolean
active
=
false
;
private
static
final
FocusManager
INSTANCE
=
new
FocusManager
();
static
FocusManager
listener
=
new
FocusManager
();
private
static
@Nullable
Component
focusedComp
;
static
Component
focusedComp
;
static
boolean
isActive
()
{
static
boolean
isActive
()
{
return
active
;
return
focusedComp
!=
null
;
}
static
void
reset
()
{
focusedComp
=
null
;
}
static
Component
getFocusedComp
()
{
return
focusedComp
;
}
}
@Override
@Override
public
void
focusGained
(
FocusEvent
e
)
{
public
void
focusGained
(
FocusEvent
e
)
{
active
=
true
;
focusedComp
=
(
Component
)
e
.
getSource
();
focusedComp
=
(
Component
)
e
.
getSource
();
}
}
@Override
@Override
public
void
focusLost
(
FocusEvent
e
)
{
public
void
focusLost
(
FocusEvent
e
)
{
active
=
false
;
focusedComp
=
null
;
}
}
static
void
listen
(
ContentPanel
pane
)
{
static
void
listen
(
ContentPanel
pane
)
{
if
(
pane
instanceof
ClassCodeContentPanel
)
{
if
(
pane
instanceof
ClassCodeContentPanel
)
{
((
ClassCodeContentPanel
)
pane
).
getCodeArea
().
addFocusListener
(
listener
);
((
ClassCodeContentPanel
)
pane
).
getCodeArea
().
addFocusListener
(
INSTANCE
);
((
ClassCodeContentPanel
)
pane
).
getSmaliCodeArea
().
addFocusListener
(
listener
);
((
ClassCodeContentPanel
)
pane
).
getSmaliCodeArea
().
addFocusListener
(
INSTANCE
);
return
;
return
;
}
}
if
(
pane
instanceof
AbstractCodeContentPanel
)
{
if
(
pane
instanceof
AbstractCodeContentPanel
)
{
((
AbstractCodeContentPanel
)
pane
).
getCodeArea
().
addFocusListener
(
listener
);
((
AbstractCodeContentPanel
)
pane
).
getCodeArea
().
addFocusListener
(
INSTANCE
);
return
;
return
;
}
}
if
(
pane
instanceof
HtmlPanel
)
{
if
(
pane
instanceof
HtmlPanel
)
{
((
HtmlPanel
)
pane
).
getHtmlArea
().
addFocusListener
(
listener
);
((
HtmlPanel
)
pane
).
getHtmlArea
().
addFocusListener
(
INSTANCE
);
return
;
return
;
}
}
if
(
pane
instanceof
ImagePanel
)
{
if
(
pane
instanceof
ImagePanel
)
{
pane
.
addFocusListener
(
listener
);
pane
.
addFocusListener
(
INSTANCE
);
return
;
return
;
}
}
// throw new JadxRuntimeException("Add the new ContentPanel to TabbedPane.FocusManager: " + pane);
// throw new JadxRuntimeException("Add the new ContentPanel to TabbedPane.FocusManager: " + pane);
...
...
jadx-gui/src/main/java/jadx/gui/ui/dialog/SearchDialog.java
浏览文件 @
dcf4a7c4
...
@@ -147,6 +147,7 @@ public class SearchDialog extends CommonSearchDialog {
...
@@ -147,6 +147,7 @@ public class SearchDialog extends CommonSearchDialog {
if
(
searchDisposable
!=
null
&&
!
searchDisposable
.
isDisposed
())
{
if
(
searchDisposable
!=
null
&&
!
searchDisposable
.
isDisposed
())
{
searchDisposable
.
dispose
();
searchDisposable
.
dispose
();
}
}
resultsModel
.
clear
();
removeActiveTabListener
();
removeActiveTabListener
();
super
.
dispose
();
super
.
dispose
();
}
}
...
@@ -399,6 +400,7 @@ public class SearchDialog extends CommonSearchDialog {
...
@@ -399,6 +400,7 @@ public class SearchDialog extends CommonSearchDialog {
if
(
searchTask
!=
null
)
{
if
(
searchTask
!=
null
)
{
searchTask
.
cancel
();
searchTask
.
cancel
();
searchTask
.
waitTask
();
searchTask
.
waitTask
();
searchTask
=
null
;
}
}
}
}
...
...
jadx-gui/src/main/java/jadx/gui/utils/UiUtils.java
浏览文件 @
dcf4a7c4
...
@@ -329,6 +329,23 @@ public class UiUtils {
...
@@ -329,6 +329,23 @@ public class UiUtils {
}
}
}
}
/**
* Owner field in Clipboard class can store reference to CodeArea.
* This prevents from garbage collection whole jadx object tree and cause memory leak.
* Trying to lost ownership by new empty selection.
*/
public
static
void
resetClipboardOwner
()
{
try
{
Clipboard
clipboard
=
Toolkit
.
getDefaultToolkit
().
getSystemSelection
();
if
(
clipboard
!=
null
)
{
StringSelection
selection
=
new
StringSelection
(
""
);
clipboard
.
setContents
(
selection
,
selection
);
}
}
catch
(
Exception
e
)
{
LOG
.
error
(
"Failed to reset clipboard owner"
,
e
);
}
}
public
static
int
calcProgress
(
ITaskProgress
taskProgress
)
{
public
static
int
calcProgress
(
ITaskProgress
taskProgress
)
{
return
calcProgress
(
taskProgress
.
progress
(),
taskProgress
.
total
());
return
calcProgress
(
taskProgress
.
progress
(),
taskProgress
.
total
());
}
}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录