Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openanolis
dragonwell8_jdk
提交
5f55e0e8
D
dragonwell8_jdk
项目概览
openanolis
/
dragonwell8_jdk
通知
3
Star
2
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
D
dragonwell8_jdk
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
提交
5f55e0e8
编写于
2月 26, 2009
作者:
R
rupashka
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
6794831: Infinite loop while painting ticks on Slider with maximum=MAX_INT
Reviewed-by: malenkov
上级
96dbd09b
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
148 addition
and
23 deletion
+148
-23
src/share/classes/javax/swing/plaf/basic/BasicSliderUI.java
src/share/classes/javax/swing/plaf/basic/BasicSliderUI.java
+43
-23
test/javax/swing/JSlider/6794831/bug6794831.java
test/javax/swing/JSlider/6794831/bug6794831.java
+105
-0
未找到文件。
src/share/classes/javax/swing/plaf/basic/BasicSliderUI.java
浏览文件 @
5f55e0e8
...
...
@@ -1004,47 +1004,62 @@ public class BasicSliderUI extends SliderUI{
g
.
setColor
(
DefaultLookup
.
getColor
(
slider
,
this
,
"Slider.tickColor"
,
Color
.
black
));
if
(
slider
.
getOrientation
()
==
JSlider
.
HORIZONTAL
)
{
g
.
translate
(
0
,
tickBounds
.
y
);
g
.
translate
(
0
,
tickBounds
.
y
);
i
nt
value
=
slider
.
getMinimum
();
int
xPos
;
i
f
(
slider
.
getMinorTickSpacing
()
>
0
)
{
int
value
=
slider
.
getMinimum
()
;
if
(
slider
.
getMinorTickSpacing
()
>
0
)
{
while
(
value
<=
slider
.
getMaximum
()
)
{
xPos
=
xPositionForValue
(
value
);
int
xPos
=
xPositionForValue
(
value
);
paintMinorTickForHorizSlider
(
g
,
tickBounds
,
xPos
);
// Overflow checking
if
(
Integer
.
MAX_VALUE
-
slider
.
getMinorTickSpacing
()
<
value
)
{
break
;
}
value
+=
slider
.
getMinorTickSpacing
();
}
}
if
(
slider
.
getMajorTickSpacing
()
>
0
)
{
value
=
slider
.
getMinimum
();
if
(
slider
.
getMajorTickSpacing
()
>
0
)
{
int
value
=
slider
.
getMinimum
();
while
(
value
<=
slider
.
getMaximum
()
)
{
xPos
=
xPositionForValue
(
value
);
int
xPos
=
xPositionForValue
(
value
);
paintMajorTickForHorizSlider
(
g
,
tickBounds
,
xPos
);
// Overflow checking
if
(
Integer
.
MAX_VALUE
-
slider
.
getMajorTickSpacing
()
<
value
)
{
break
;
}
value
+=
slider
.
getMajorTickSpacing
();
}
}
g
.
translate
(
0
,
-
tickBounds
.
y
);
}
else
{
g
.
translate
(
tickBounds
.
x
,
0
);
int
value
=
slider
.
getMinimum
();
int
yPos
;
}
else
{
g
.
translate
(
tickBounds
.
x
,
0
);
if
(
slider
.
getMinorTickSpacing
()
>
0
)
{
if
(
slider
.
getMinorTickSpacing
()
>
0
)
{
int
offset
=
0
;
if
(!
BasicGraphicsUtils
.
isLeftToRight
(
slider
))
{
offset
=
tickBounds
.
width
-
tickBounds
.
width
/
2
;
g
.
translate
(
offset
,
0
);
}
while
(
value
<=
slider
.
getMaximum
()
)
{
yPos
=
yPositionForValue
(
value
);
int
value
=
slider
.
getMinimum
();
while
(
value
<=
slider
.
getMaximum
())
{
int
yPos
=
yPositionForValue
(
value
);
paintMinorTickForVertSlider
(
g
,
tickBounds
,
yPos
);
// Overflow checking
if
(
Integer
.
MAX_VALUE
-
slider
.
getMinorTickSpacing
()
<
value
)
{
break
;
}
value
+=
slider
.
getMinorTickSpacing
();
}
...
...
@@ -1053,15 +1068,22 @@ public class BasicSliderUI extends SliderUI{
}
}
if
(
slider
.
getMajorTickSpacing
()
>
0
)
{
value
=
slider
.
getMinimum
();
if
(
slider
.
getMajorTickSpacing
()
>
0
)
{
if
(!
BasicGraphicsUtils
.
isLeftToRight
(
slider
))
{
g
.
translate
(
2
,
0
);
}
while
(
value
<=
slider
.
getMaximum
()
)
{
yPos
=
yPositionForValue
(
value
);
int
value
=
slider
.
getMinimum
();
while
(
value
<=
slider
.
getMaximum
())
{
int
yPos
=
yPositionForValue
(
value
);
paintMajorTickForVertSlider
(
g
,
tickBounds
,
yPos
);
// Overflow checking
if
(
Integer
.
MAX_VALUE
-
slider
.
getMajorTickSpacing
()
<
value
)
{
break
;
}
value
+=
slider
.
getMajorTickSpacing
();
}
...
...
@@ -1775,8 +1797,6 @@ public class BasicSliderUI extends SliderUI{
thumbMiddle
=
thumbLeft
+
halfThumbWidth
;
slider
.
setValue
(
valueForXPosition
(
thumbMiddle
));
break
;
default
:
return
;
}
}
...
...
test/javax/swing/JSlider/6794831/bug6794831.java
0 → 100644
浏览文件 @
5f55e0e8
/*
* Copyright 2009 Sun Microsystems, Inc. All Rights Reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
* CA 95054 USA or visit www.sun.com if you need additional information or
* have any questions.
*/
/* @test
* @bug 6794831
* @summary Infinite loop while painting ticks on Slider with maximum=MAX_INT
* @author Pavel Porvatov
@run main bug6794831
*/
import
javax.swing.*
;
import
javax.swing.plaf.basic.BasicSliderUI
;
import
java.awt.image.BufferedImage
;
import
java.util.concurrent.CountDownLatch
;
import
java.util.concurrent.TimeUnit
;
public
class
bug6794831
{
private
final
CountDownLatch
countDownLatch
=
new
CountDownLatch
(
1
);
public
static
void
main
(
String
args
[])
throws
InterruptedException
{
new
bug6794831
().
run
();
}
private
void
run
()
throws
InterruptedException
{
SwingUtilities
.
invokeLater
(
new
Runnable
()
{
public
void
run
()
{
for
(
UIManager
.
LookAndFeelInfo
lookAndFeelInfo
:
UIManager
.
getInstalledLookAndFeels
())
{
try
{
UIManager
.
setLookAndFeel
(
lookAndFeelInfo
.
getClassName
());
}
catch
(
Exception
e
)
{
fail
(
e
.
getMessage
());
}
BufferedImage
image
=
new
BufferedImage
(
300
,
200
,
BufferedImage
.
TYPE_INT_ARGB
);
// Test 1
JSlider
slider
=
new
JSlider
(
0
,
Integer
.
MAX_VALUE
-
1
,
0
);
slider
.
setMajorTickSpacing
((
Integer
.
MAX_VALUE
-
1
)
/
4
);
slider
.
setPaintTicks
(
true
);
((
BasicSliderUI
)
slider
.
getUI
()).
paintTicks
(
image
.
getGraphics
());
// Test 2
slider
=
new
JSlider
(
0
,
Integer
.
MAX_VALUE
-
1
,
0
);
slider
.
setMinorTickSpacing
((
Integer
.
MAX_VALUE
-
1
)
/
4
);
slider
.
setPaintTicks
(
true
);
((
BasicSliderUI
)
slider
.
getUI
()).
paintTicks
(
image
.
getGraphics
());
// Test 3
slider
=
new
JSlider
(
0
,
Integer
.
MAX_VALUE
-
1
,
0
);
slider
.
setOrientation
(
JSlider
.
VERTICAL
);
slider
.
setMajorTickSpacing
((
Integer
.
MAX_VALUE
-
1
)
/
4
);
slider
.
setPaintTicks
(
true
);
((
BasicSliderUI
)
slider
.
getUI
()).
paintTicks
(
image
.
getGraphics
());
// Test 4
slider
=
new
JSlider
(
0
,
Integer
.
MAX_VALUE
-
1
,
0
);
slider
.
setOrientation
(
JSlider
.
VERTICAL
);
slider
.
setMinorTickSpacing
((
Integer
.
MAX_VALUE
-
1
)
/
4
);
slider
.
setPaintTicks
(
true
);
((
BasicSliderUI
)
slider
.
getUI
()).
paintTicks
(
image
.
getGraphics
());
countDownLatch
.
countDown
();
}
}
});
if
(
countDownLatch
.
await
(
3000
,
TimeUnit
.
MILLISECONDS
))
{
System
.
out
.
println
(
"bug6794831 passed"
);
}
else
{
fail
(
"bug6794831 failed"
);
}
}
private
static
void
fail
(
String
msg
)
{
throw
new
RuntimeException
(
msg
);
}
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录