Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openanolis
dragonwell8_jdk
提交
6e6c4321
D
dragonwell8_jdk
项目概览
openanolis
/
dragonwell8_jdk
通知
4
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看板
提交
6e6c4321
编写于
8月 05, 2009
作者:
Y
yan
浏览文件
操作
浏览文件
下载
差异文件
Merge
上级
fb547518
e821519f
变更
26
展开全部
隐藏空白更改
内联
并排
Showing
26 changed file
with
963 addition
and
509 deletion
+963
-509
src/share/classes/javax/swing/JFileChooser.java
src/share/classes/javax/swing/JFileChooser.java
+6
-1
src/share/classes/javax/swing/JInternalFrame.java
src/share/classes/javax/swing/JInternalFrame.java
+15
-16
src/share/classes/javax/swing/plaf/basic/BasicDesktopIconUI.java
...re/classes/javax/swing/plaf/basic/BasicDesktopIconUI.java
+1
-14
src/share/classes/javax/swing/plaf/basic/BasicDirectoryModel.java
...e/classes/javax/swing/plaf/basic/BasicDirectoryModel.java
+7
-3
src/share/classes/javax/swing/plaf/basic/BasicInternalFrameUI.java
.../classes/javax/swing/plaf/basic/BasicInternalFrameUI.java
+27
-15
src/share/classes/javax/swing/plaf/basic/BasicScrollPaneUI.java
...are/classes/javax/swing/plaf/basic/BasicScrollPaneUI.java
+7
-12
src/share/classes/javax/swing/plaf/basic/DesktopIconMover.java
...hare/classes/javax/swing/plaf/basic/DesktopIconMover.java
+0
-168
src/share/classes/javax/swing/plaf/nimbus/AbstractRegionPainter.java
...lasses/javax/swing/plaf/nimbus/AbstractRegionPainter.java
+34
-16
src/share/classes/javax/swing/plaf/nimbus/NimbusIcon.java
src/share/classes/javax/swing/plaf/nimbus/NimbusIcon.java
+2
-0
src/share/classes/javax/swing/text/GlyphView.java
src/share/classes/javax/swing/text/GlyphView.java
+3
-2
src/share/classes/javax/swing/text/ParagraphView.java
src/share/classes/javax/swing/text/ParagraphView.java
+0
-17
src/share/classes/sun/awt/shell/ShellFolder.java
src/share/classes/sun/awt/shell/ShellFolder.java
+52
-8
src/share/classes/sun/awt/shell/ShellFolderManager.java
src/share/classes/sun/awt/shell/ShellFolderManager.java
+3
-7
src/share/classes/sun/swing/FilePane.java
src/share/classes/sun/swing/FilePane.java
+3
-4
src/share/classes/sun/swing/MenuItemLayoutHelper.java
src/share/classes/sun/swing/MenuItemLayoutHelper.java
+2
-2
src/solaris/classes/sun/awt/X11/XRobotPeer.java
src/solaris/classes/sun/awt/X11/XRobotPeer.java
+4
-2
src/solaris/native/sun/awt/awt_Robot.c
src/solaris/native/sun/awt/awt_Robot.c
+9
-12
src/windows/classes/sun/awt/shell/Win32ShellFolder2.java
src/windows/classes/sun/awt/shell/Win32ShellFolder2.java
+151
-145
src/windows/classes/sun/awt/shell/Win32ShellFolderManager2.java
...ndows/classes/sun/awt/shell/Win32ShellFolderManager2.java
+59
-34
src/windows/native/sun/windows/awt_Component.cpp
src/windows/native/sun/windows/awt_Component.cpp
+4
-3
test/java/awt/EventQueue/6638195/bug6638195.java
test/java/awt/EventQueue/6638195/bug6638195.java
+15
-3
test/java/awt/Frame/FrameSize/TestFrameSize.java
test/java/awt/Frame/FrameSize/TestFrameSize.java
+53
-25
test/javax/swing/JInternalFrame/Test6505027.java
test/javax/swing/JInternalFrame/Test6505027.java
+136
-0
test/javax/swing/JInternalFrame/Test6802868.java
test/javax/swing/JInternalFrame/Test6802868.java
+108
-0
test/javax/swing/JScrollPane/Test6526631.java
test/javax/swing/JScrollPane/Test6526631.java
+102
-0
test/javax/swing/SwingTest.java
test/javax/swing/SwingTest.java
+160
-0
未找到文件。
src/share/classes/javax/swing/JFileChooser.java
浏览文件 @
6e6c4321
/*
* Copyright 1997-200
8
Sun Microsystems, Inc. All Rights Reserved.
* Copyright 1997-200
9
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
...
...
@@ -739,6 +739,11 @@ public class JFileChooser extends JComponent implements Accessible {
dialog
.
show
();
firePropertyChange
(
"JFileChooserDialogIsClosingProperty"
,
dialog
,
null
);
// Remove all components from dialog. The MetalFileChooserUI.installUI() method (and other LAFs)
// registers AWT listener for dialogs and produces memory leaks. It happens when
// installUI invoked after the showDialog method.
dialog
.
getContentPane
().
removeAll
();
dialog
.
dispose
();
dialog
=
null
;
return
returnValue
;
...
...
src/share/classes/javax/swing/JInternalFrame.java
浏览文件 @
6e6c4321
...
...
@@ -26,13 +26,10 @@
package
javax.swing
;
import
java.awt.*
;
import
java.awt.event.*
;
import
java.beans.PropertyVetoException
;
import
java.beans.PropertyChangeEvent
;
import
java.util.EventListener
;
import
javax.swing.border.Border
;
import
javax.swing.event.InternalFrameEvent
;
import
javax.swing.event.InternalFrameListener
;
import
javax.swing.plaf.*
;
...
...
@@ -40,7 +37,6 @@ import javax.swing.plaf.*;
import
javax.accessibility.*
;
import
java.io.ObjectOutputStream
;
import
java.io.ObjectInputStream
;
import
java.io.IOException
;
import
java.lang.StringBuilder
;
import
java.beans.PropertyChangeListener
;
...
...
@@ -1459,19 +1455,22 @@ public class JInternalFrame extends JComponent implements
SwingUtilities2
.
compositeRequestFocus
(
getDesktopIcon
());
}
else
{
// FocusPropertyChangeListener will eventually update
// lastFocusOwner. As focus requests are asynchronous
// lastFocusOwner may be accessed before it has been correctly
// updated. To avoid any problems, lastFocusOwner is immediately
// set, assuming the request will succeed.
lastFocusOwner
=
getMostRecentFocusOwner
();
if
(
lastFocusOwner
==
null
)
{
// Make sure focus is restored somewhere, so that
// we don't leave a focused component in another frame while
// this frame is selected.
lastFocusOwner
=
getContentPane
();
Component
component
=
KeyboardFocusManager
.
getCurrentKeyboardFocusManager
().
getPermanentFocusOwner
();
if
((
component
==
null
)
||
!
SwingUtilities
.
isDescendingFrom
(
component
,
this
))
{
// FocusPropertyChangeListener will eventually update
// lastFocusOwner. As focus requests are asynchronous
// lastFocusOwner may be accessed before it has been correctly
// updated. To avoid any problems, lastFocusOwner is immediately
// set, assuming the request will succeed.
setLastFocusOwner
(
getMostRecentFocusOwner
());
if
(
lastFocusOwner
==
null
)
{
// Make sure focus is restored somewhere, so that
// we don't leave a focused component in another frame while
// this frame is selected.
setLastFocusOwner
(
getContentPane
());
}
lastFocusOwner
.
requestFocus
();
}
lastFocusOwner
.
requestFocus
();
}
}
...
...
src/share/classes/javax/swing/plaf/basic/BasicDesktopIconUI.java
浏览文件 @
6e6c4321
/*
* Copyright 1997-200
8
Sun Microsystems, Inc. All Rights Reserved.
* Copyright 1997-200
9
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
...
...
@@ -32,9 +32,6 @@ import javax.swing.event.*;
import
javax.swing.border.*
;
import
javax.swing.plaf.*
;
import
java.beans.*
;
import
java.util.EventListener
;
import
java.io.Serializable
;
/**
* Basic L&F for a minimized window on a desktop.
...
...
@@ -47,7 +44,6 @@ public class BasicDesktopIconUI extends DesktopIconUI {
protected
JInternalFrame
.
JDesktopIcon
desktopIcon
;
protected
JInternalFrame
frame
;
private
DesktopIconMover
desktopIconMover
;
/**
* The title pane component used in the desktop icon.
...
...
@@ -128,21 +124,12 @@ public class BasicDesktopIconUI extends DesktopIconUI {
mouseInputListener
=
createMouseInputListener
();
desktopIcon
.
addMouseMotionListener
(
mouseInputListener
);
desktopIcon
.
addMouseListener
(
mouseInputListener
);
getDesktopIconMover
().
installListeners
();
}
protected
void
uninstallListeners
()
{
desktopIcon
.
removeMouseMotionListener
(
mouseInputListener
);
desktopIcon
.
removeMouseListener
(
mouseInputListener
);
mouseInputListener
=
null
;
getDesktopIconMover
().
uninstallListeners
();
}
private
DesktopIconMover
getDesktopIconMover
()
{
if
(
desktopIconMover
==
null
)
{
desktopIconMover
=
new
DesktopIconMover
(
desktopIcon
);
}
return
desktopIconMover
;
}
protected
void
installDefaults
()
{
...
...
src/share/classes/javax/swing/plaf/basic/BasicDirectoryModel.java
浏览文件 @
6e6c4321
/*
* Copyright 1998-200
8
Sun Microsystems, Inc. All Rights Reserved.
* Copyright 1998-200
9
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
...
...
@@ -232,6 +232,10 @@ public class BasicDirectoryModel extends AbstractListModel implements PropertyCh
public
void
run0
()
{
FileSystemView
fileSystem
=
filechooser
.
getFileSystemView
();
if
(
isInterrupted
())
{
return
;
}
File
[]
list
=
fileSystem
.
getFiles
(
currentDirectory
,
filechooser
.
isFileHidingEnabled
());
if
(
isInterrupted
())
{
...
...
@@ -268,8 +272,8 @@ public class BasicDirectoryModel extends AbstractListModel implements PropertyCh
// To avoid loads of synchronizations with Invoker and improve performance we
// execute the whole block on the COM thread
DoChangeContents
doChangeContents
=
ShellFolder
.
getInvoker
().
invoke
(
new
Callable
<
DoChangeContents
>()
{
public
DoChangeContents
call
()
throws
Exception
{
DoChangeContents
doChangeContents
=
ShellFolder
.
invoke
(
new
Callable
<
DoChangeContents
>()
{
public
DoChangeContents
call
()
{
int
newSize
=
newFileCache
.
size
();
int
oldSize
=
fileCache
.
size
();
...
...
src/share/classes/javax/swing/plaf/basic/BasicInternalFrameUI.java
浏览文件 @
6e6c4321
...
...
@@ -27,16 +27,10 @@ package javax.swing.plaf.basic;
import
java.awt.*
;
import
java.awt.event.*
;
import
java.awt.peer.LightweightPeer
;
import
javax.swing.*
;
import
javax.swing.border.*
;
import
javax.swing.plaf.*
;
import
javax.swing.event.*
;
import
java.beans.*
;
import
java.io.Serializable
;
import
sun.swing.DefaultLookup
;
import
sun.swing.UIAction
;
...
...
@@ -55,6 +49,7 @@ public class BasicInternalFrameUI extends InternalFrameUI
protected
MouseInputAdapter
borderListener
;
protected
PropertyChangeListener
propertyChangeListener
;
protected
LayoutManager
internalFrameLayout
;
protected
ComponentListener
componentListener
;
protected
MouseInputListener
glassPaneDispatcher
;
private
InternalFrameListener
internalFrameListener
;
...
...
@@ -66,9 +61,9 @@ public class BasicInternalFrameUI extends InternalFrameUI
protected
BasicInternalFrameTitlePane
titlePane
;
// access needs this
private
static
DesktopManager
sharedDesktopManager
;
private
boolean
componentListenerAdded
=
false
;
private
Rectangle
parentBounds
;
private
DesktopIconMover
desktopIconMover
;
private
boolean
dragging
=
false
;
private
boolean
resizing
=
false
;
...
...
@@ -209,17 +204,14 @@ public class BasicInternalFrameUI extends InternalFrameUI
frame
.
getGlassPane
().
addMouseListener
(
glassPaneDispatcher
);
frame
.
getGlassPane
().
addMouseMotionListener
(
glassPaneDispatcher
);
}
componentListener
=
createComponentListener
();
if
(
frame
.
getParent
()
!=
null
)
{
parentBounds
=
frame
.
getParent
().
getBounds
();
}
getDesktopIconMover
().
installListeners
();
}
private
DesktopIconMover
getDesktopIconMover
()
{
if
(
desktopIconMover
==
null
)
{
desktopIconMover
=
new
DesktopIconMover
(
frame
);
if
((
frame
.
getParent
()
!=
null
)
&&
!
componentListenerAdded
)
{
frame
.
getParent
().
addComponentListener
(
componentListener
);
componentListenerAdded
=
true
;
}
return
desktopIconMover
;
}
// Provide a FocusListener to listen for a WINDOW_LOST_FOCUS event,
...
...
@@ -290,7 +282,11 @@ public class BasicInternalFrameUI extends InternalFrameUI
* @since 1.3
*/
protected
void
uninstallListeners
()
{
getDesktopIconMover
().
uninstallListeners
();
if
((
frame
.
getParent
()
!=
null
)
&&
componentListenerAdded
)
{
frame
.
getParent
().
removeComponentListener
(
componentListener
);
componentListenerAdded
=
false
;
}
componentListener
=
null
;
if
(
glassPaneDispatcher
!=
null
)
{
frame
.
getGlassPane
().
removeMouseListener
(
glassPaneDispatcher
);
frame
.
getGlassPane
().
removeMouseMotionListener
(
glassPaneDispatcher
);
...
...
@@ -1228,6 +1224,15 @@ public class BasicInternalFrameUI extends InternalFrameUI
}
}
// Relocate the icon base on the new parent bounds.
if
(
icon
!=
null
)
{
Rectangle
iconBounds
=
icon
.
getBounds
();
int
y
=
iconBounds
.
y
+
(
parentNewBounds
.
height
-
parentBounds
.
height
);
icon
.
setBounds
(
iconBounds
.
x
,
y
,
iconBounds
.
width
,
iconBounds
.
height
);
}
// Update the new parent bounds for next resize.
if
(!
parentBounds
.
equals
(
parentNewBounds
))
{
parentBounds
=
parentNewBounds
;
...
...
@@ -1399,6 +1404,9 @@ public class BasicInternalFrameUI extends InternalFrameUI
// Cancel a resize in progress if the internal frame
// gets a setClosed(true) or dispose().
cancelResize
();
if
((
frame
.
getParent
()
!=
null
)
&&
componentListenerAdded
)
{
frame
.
getParent
().
removeComponentListener
(
componentListener
);
}
closeFrame
(
f
);
}
}
else
if
(
JInternalFrame
.
IS_MAXIMUM_PROPERTY
==
prop
)
{
...
...
@@ -1431,6 +1439,10 @@ public class BasicInternalFrameUI extends InternalFrameUI
}
else
{
parentBounds
=
null
;
}
if
((
frame
.
getParent
()
!=
null
)
&&
!
componentListenerAdded
)
{
f
.
getParent
().
addComponentListener
(
componentListener
);
componentListenerAdded
=
true
;
}
}
else
if
(
JInternalFrame
.
TITLE_PROPERTY
==
prop
||
prop
==
"closable"
||
prop
==
"iconable"
||
prop
==
"maximizable"
)
{
...
...
src/share/classes/javax/swing/plaf/basic/BasicScrollPaneUI.java
浏览文件 @
6e6c4321
/*
* Copyright 1997-200
5
Sun Microsystems, Inc. All Rights Reserved.
* Copyright 1997-200
9
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
...
...
@@ -37,17 +37,12 @@ import java.beans.PropertyChangeListener;
import
java.beans.PropertyChangeEvent
;
import
java.awt.Component
;
import
java.awt.Container
;
import
java.awt.LayoutManager
;
import
java.awt.Rectangle
;
import
java.awt.Dimension
;
import
java.awt.Point
;
import
java.awt.Insets
;
import
java.awt.Graphics
;
import
java.awt.event.*
;
import
java.io.Serializable
;
import
java.awt.Toolkit
;
import
java.awt.ComponentOrientation
;
/**
* A default L&F implementation of ScrollPaneUI.
...
...
@@ -63,6 +58,7 @@ public class BasicScrollPaneUI
protected
ChangeListener
viewportChangeListener
;
protected
PropertyChangeListener
spPropertyChangeListener
;
private
MouseWheelListener
mouseScrollListener
;
private
int
oldExtent
=
Integer
.
MIN_VALUE
;
/**
* PropertyChangeListener installed on the vertical scrollbar.
...
...
@@ -327,9 +323,13 @@ public class BasicScrollPaneUI
* leave it until someone claims.
*/
value
=
Math
.
max
(
0
,
Math
.
min
(
max
-
extent
,
max
-
extent
-
viewPosition
.
x
));
if
(
oldExtent
>
extent
)
{
value
-=
oldExtent
-
extent
;
}
}
}
}
oldExtent
=
extent
;
hsb
.
setValues
(
value
,
extent
,
0
,
max
);
}
...
...
@@ -1020,7 +1020,7 @@ public class BasicScrollPaneUI
if
(
viewport
!=
null
)
{
if
(
e
.
getSource
()
==
viewport
)
{
viewportStateChanged
(
e
);
syncScrollPaneWithViewport
(
);
}
else
{
JScrollBar
hsb
=
scrollpane
.
getHorizontalScrollBar
();
...
...
@@ -1077,11 +1077,6 @@ public class BasicScrollPaneUI
viewport
.
setViewPosition
(
p
);
}
private
void
viewportStateChanged
(
ChangeEvent
e
)
{
syncScrollPaneWithViewport
();
}
//
// PropertyChangeListener: This is installed on both the JScrollPane
// and the horizontal/vertical scrollbars.
...
...
src/share/classes/javax/swing/plaf/basic/DesktopIconMover.java
已删除
100644 → 0
浏览文件 @
fb547518
/*
* Copyright 1997-2008 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. Sun designates this
* particular file as subject to the "Classpath" exception as provided
* by Sun in the LICENSE file that accompanied this code.
*
* 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.
*/
package
javax.swing.plaf.basic
;
import
javax.swing.*
;
import
java.awt.*
;
import
java.awt.event.*
;
import
java.beans.*
;
/**
* DesktopIconMover is intended to move desktop icon
* when parent window is resized.
*/
class
DesktopIconMover
implements
ComponentListener
,
PropertyChangeListener
{
private
Component
parent
;
private
JInternalFrame
frame
;
// if not null, DesktopIconMover(frame)
// constructor was used
private
JInternalFrame
.
JDesktopIcon
icon
;
private
Rectangle
parentBounds
;
private
boolean
componentListenerAdded
=
false
;
public
DesktopIconMover
(
JInternalFrame
frame
)
{
if
(
frame
==
null
)
{
throw
new
NullPointerException
(
"Frame cannot be null"
);
}
this
.
frame
=
frame
;
this
.
icon
=
frame
.
getDesktopIcon
();
if
(
icon
==
null
)
{
throw
new
NullPointerException
(
"frame.getDesktopIcon() cannot be null"
);
}
this
.
parent
=
frame
.
getParent
();
if
(
this
.
parent
!=
null
)
{
parentBounds
=
this
.
parent
.
getBounds
();
}
}
public
DesktopIconMover
(
JInternalFrame
.
JDesktopIcon
icon
)
{
if
(
icon
==
null
)
{
throw
new
NullPointerException
(
"Icon cannot be null"
);
}
this
.
icon
=
icon
;
this
.
parent
=
icon
.
getParent
();
if
(
this
.
parent
!=
null
)
{
parentBounds
=
this
.
parent
.
getBounds
();
}
}
public
void
installListeners
()
{
if
(
frame
!=
null
)
{
frame
.
addPropertyChangeListener
(
this
);
}
else
{
icon
.
addPropertyChangeListener
(
this
);
}
addComponentListener
();
}
public
void
uninstallListeners
()
{
if
(
frame
!=
null
)
{
frame
.
removePropertyChangeListener
(
this
);
}
else
{
icon
.
removePropertyChangeListener
(
this
);
}
removeComponentListener
();
}
public
void
propertyChange
(
PropertyChangeEvent
evt
)
{
String
propName
=
evt
.
getPropertyName
();
if
(
"ancestor"
.
equals
(
propName
))
{
Component
newAncestor
=
(
Component
)
evt
.
getNewValue
();
// Remove component listener if parent is changing
Component
probablyNewParent
=
getCurrentParent
();
if
((
probablyNewParent
!=
null
)
&&
(!
probablyNewParent
.
equals
(
parent
)))
{
removeComponentListener
();
parent
=
probablyNewParent
;
}
if
(
newAncestor
==
null
)
{
removeComponentListener
();
}
else
{
addComponentListener
();
}
// Update parentBounds
if
(
parent
!=
null
)
{
parentBounds
=
parent
.
getBounds
();
}
else
{
parentBounds
=
null
;
}
}
else
if
(
JInternalFrame
.
IS_CLOSED_PROPERTY
.
equals
(
propName
))
{
removeComponentListener
();
}
}
private
void
addComponentListener
()
{
if
(!
componentListenerAdded
&&
(
parent
!=
null
))
{
parent
.
addComponentListener
(
this
);
componentListenerAdded
=
true
;
}
}
private
void
removeComponentListener
()
{
if
((
parent
!=
null
)
&&
componentListenerAdded
)
{
parent
.
removeComponentListener
(
this
);
componentListenerAdded
=
false
;
}
}
private
Component
getCurrentParent
()
{
if
(
frame
!=
null
)
{
return
frame
.
getParent
();
}
else
{
return
icon
.
getParent
();
}
}
public
void
componentResized
(
ComponentEvent
e
)
{
if
((
parent
==
null
)
||
(
parentBounds
==
null
))
{
return
;
}
Rectangle
parentNewBounds
=
parent
.
getBounds
();
if
((
parentNewBounds
==
null
)
||
parentNewBounds
.
equals
(
parentBounds
))
{
return
;
}
// Move desktop icon only in up-down direction
int
newIconY
=
icon
.
getLocation
().
y
+
(
parentNewBounds
.
height
-
parentBounds
.
height
);
icon
.
setLocation
(
icon
.
getLocation
().
x
,
newIconY
);
parentBounds
=
parentNewBounds
;
}
public
void
componentMoved
(
ComponentEvent
e
)
{
}
public
void
componentShown
(
ComponentEvent
e
)
{
}
public
void
componentHidden
(
ComponentEvent
e
)
{
}
}
src/share/classes/javax/swing/plaf/nimbus/AbstractRegionPainter.java
浏览文件 @
6e6c4321
...
...
@@ -227,10 +227,10 @@ public abstract class AbstractRegionPainter implements Painter<JComponent> {
*
* @param x an encoded x value (0...1, or 1...2, or 2...3)
* @return the decoded x value
* @throws IllegalArgumentException
* if {@code x < 0} or {@code x > 3}
*/
protected
final
float
decodeX
(
float
x
)
{
if
(
ctx
.
canvasSize
==
null
)
return
x
;
if
(
x
>=
0
&&
x
<=
1
)
{
return
x
*
leftWidth
;
}
else
if
(
x
>
1
&&
x
<
2
)
{
...
...
@@ -238,7 +238,7 @@ public abstract class AbstractRegionPainter implements Painter<JComponent> {
}
else
if
(
x
>=
2
&&
x
<=
3
)
{
return
((
x
-
2
)
*
rightWidth
)
+
leftWidth
+
centerWidth
;
}
else
{
throw
new
AssertionError
(
"Invalid x"
);
throw
new
IllegalArgumentException
(
"Invalid x"
);
}
}
...
...
@@ -248,10 +248,10 @@ public abstract class AbstractRegionPainter implements Painter<JComponent> {
*
* @param y an encoded y value (0...1, or 1...2, or 2...3)
* @return the decoded y value
* @throws IllegalArgumentException
* if {@code y < 0} or {@code y > 3}
*/
protected
final
float
decodeY
(
float
y
)
{
if
(
ctx
.
canvasSize
==
null
)
return
y
;
if
(
y
>=
0
&&
y
<=
1
)
{
return
y
*
topHeight
;
}
else
if
(
y
>
1
&&
y
<
2
)
{
...
...
@@ -259,7 +259,7 @@ public abstract class AbstractRegionPainter implements Painter<JComponent> {
}
else
if
(
y
>=
2
&&
y
<=
3
)
{
return
((
y
-
2
)
*
bottomHeight
)
+
topHeight
+
centerHeight
;
}
else
{
throw
new
AssertionError
(
"Invalid y"
);
throw
new
IllegalArgumentException
(
"Invalid y"
);
}
}
...
...
@@ -271,10 +271,10 @@ public abstract class AbstractRegionPainter implements Painter<JComponent> {
* @param x an encoded x value of the bezier control point (0...1, or 1...2, or 2...3)
* @param dx the offset distance to the anchor from the control point x
* @return the decoded x location of the control point
* @throws IllegalArgumentException
* if {@code x < 0} or {@code x > 3}
*/
protected
final
float
decodeAnchorX
(
float
x
,
float
dx
)
{
if
(
ctx
.
canvasSize
==
null
)
return
x
+
dx
;
if
(
x
>=
0
&&
x
<=
1
)
{
return
decodeX
(
x
)
+
(
dx
*
leftScale
);
}
else
if
(
x
>
1
&&
x
<
2
)
{
...
...
@@ -282,7 +282,7 @@ public abstract class AbstractRegionPainter implements Painter<JComponent> {
}
else
if
(
x
>=
2
&&
x
<=
3
)
{
return
decodeX
(
x
)
+
(
dx
*
rightScale
);
}
else
{
throw
new
AssertionError
(
"Invalid x"
);
throw
new
IllegalArgumentException
(
"Invalid x"
);
}
}
...
...
@@ -294,10 +294,10 @@ public abstract class AbstractRegionPainter implements Painter<JComponent> {
* @param y an encoded y value of the bezier control point (0...1, or 1...2, or 2...3)
* @param dy the offset distance to the anchor from the control point y
* @return the decoded y position of the control point
* @throws IllegalArgumentException
* if {@code y < 0} or {@code y > 3}
*/
protected
final
float
decodeAnchorY
(
float
y
,
float
dy
)
{
if
(
ctx
.
canvasSize
==
null
)
return
y
+
dy
;
if
(
y
>=
0
&&
y
<=
1
)
{
return
decodeY
(
y
)
+
(
dy
*
topScale
);
}
else
if
(
y
>
1
&&
y
<
2
)
{
...
...
@@ -305,7 +305,7 @@ public abstract class AbstractRegionPainter implements Painter<JComponent> {
}
else
if
(
y
>=
2
&&
y
<=
3
)
{
return
decodeY
(
y
)
+
(
dy
*
bottomScale
);
}
else
{
throw
new
AssertionError
(
"Invalid y"
);
throw
new
IllegalArgumentException
(
"Invalid y"
);
}
}
...
...
@@ -363,6 +363,15 @@ public abstract class AbstractRegionPainter implements Painter<JComponent> {
* @param midpoints
* @param colors
* @return a valid LinearGradientPaint. This method never returns null.
* @throws NullPointerException
* if {@code midpoints} array is null,
* or {@code colors} array is null,
* @throws IllegalArgumentException
* if start and end points are the same points,
* or {@code midpoints.length != colors.length},
* or {@code colors} is less than 2 in size,
* or a {@code midpoints} value is less than 0.0 or greater than 1.0,
* or the {@code midpoints} are not provided in strictly increasing order
*/
protected
final
LinearGradientPaint
decodeGradient
(
float
x1
,
float
y1
,
float
x2
,
float
y2
,
float
[]
midpoints
,
Color
[]
colors
)
{
if
(
x1
==
x2
&&
y1
==
y2
)
{
...
...
@@ -384,6 +393,15 @@ public abstract class AbstractRegionPainter implements Painter<JComponent> {
* @param midpoints
* @param colors
* @return a valid RadialGradientPaint. This method never returns null.
* @throws NullPointerException
* if {@code midpoints} array is null,
* or {@code colors} array is null
* @throws IllegalArgumentException
* if {@code r} is non-positive,
* or {@code midpoints.length != colors.length},
* or {@code colors} is less than 2 in size,
* or a {@code midpoints} value is less than 0.0 or greater than 1.0,
* or the {@code midpoints} are not provided in strictly increasing order
*/
protected
final
RadialGradientPaint
decodeRadialGradient
(
float
x
,
float
y
,
float
r
,
float
[]
midpoints
,
Color
[]
colors
)
{
if
(
r
==
0
f
)
{
...
...
@@ -537,10 +555,10 @@ public abstract class AbstractRegionPainter implements Painter<JComponent> {
this
.
maxVerticalScaleFactor
=
maxV
;
if
(
canvasSize
!=
null
)
{
a
=
i
nsets
.
left
;
b
=
canvasSize
.
width
-
i
nsets
.
right
;
c
=
i
nsets
.
top
;
d
=
canvasSize
.
height
-
i
nsets
.
bottom
;
a
=
stretchingI
nsets
.
left
;
b
=
canvasSize
.
width
-
stretchingI
nsets
.
right
;
c
=
stretchingI
nsets
.
top
;
d
=
canvasSize
.
height
-
stretchingI
nsets
.
bottom
;
this
.
canvasSize
=
canvasSize
;
this
.
inverted
=
inverted
;
if
(
inverted
)
{
...
...
src/share/classes/javax/swing/plaf/nimbus/NimbusIcon.java
浏览文件 @
6e6c4321
...
...
@@ -84,6 +84,8 @@ class NimbusIcon extends SynthIcon {
translatex
=
1
;
}
}
}
else
if
(
c
instanceof
JMenu
)
{
flip
=
!
c
.
getComponentOrientation
().
isLeftToRight
();
}
if
(
g
instanceof
Graphics2D
){
Graphics2D
gfx
=
(
Graphics2D
)
g
;
...
...
src/share/classes/javax/swing/text/GlyphView.java
浏览文件 @
6e6c4321
...
...
@@ -719,8 +719,9 @@ public class GlyphView extends View implements TabableView, Cloneable {
checkPainter
();
int
p0
=
getStartOffset
();
int
p1
=
painter
.
getBoundedPosition
(
this
,
p0
,
pos
,
len
);
return
((
p1
>
p0
)
&&
(
getBreakSpot
(
p0
,
p1
)
!=
BreakIterator
.
DONE
))
?
View
.
ExcellentBreakWeight
:
View
.
BadBreakWeight
;
return
p1
==
p0
?
View
.
BadBreakWeight
:
getBreakSpot
(
p0
,
p1
)
!=
BreakIterator
.
DONE
?
View
.
ExcellentBreakWeight
:
View
.
GoodBreakWeight
;
}
return
super
.
getBreakWeight
(
axis
,
pos
,
len
);
}
...
...
src/share/classes/javax/swing/text/ParagraphView.java
浏览文件 @
6e6c4321
...
...
@@ -174,23 +174,6 @@ public class ParagraphView extends FlowView implements TabExpander {
return
layoutPool
.
getView
(
index
);
}
/**
* Adjusts the given row if possible to fit within the
* layout span. By default this will try to find the
* highest break weight possible nearest the end of
* the row. If a forced break is encountered, the
* break will be positioned there.
* <p>
* This is meant for internal usage, and should not be used directly.
*
* @param r the row to adjust to the current layout
* span
* @param desiredSpan the current layout span >= 0
* @param x the location r starts at
*/
protected
void
adjustRow
(
Row
r
,
int
desiredSpan
,
int
x
)
{
}
/**
* Returns the next visual position for the cursor, in
* either the east or west direction.
...
...
src/share/classes/sun/awt/shell/ShellFolder.java
浏览文件 @
6e6c4321
/*
* Copyright 2000-200
8
Sun Microsystems, Inc. All Rights Reserved.
* Copyright 2000-200
9
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
...
...
@@ -289,8 +289,8 @@ public abstract class ShellFolder extends File {
// To avoid loads of synchronizations with Invoker and improve performance we
// synchronize the whole code of the sort method once
getInvoker
().
invoke
(
new
Callable
<
Void
>()
{
public
Void
call
()
throws
Exception
{
invoke
(
new
Callable
<
Void
>()
{
public
Void
call
()
{
// Check that we can use the ShellFolder.sortChildren() method:
// 1. All files have the same non-null parent
// 2. All files is ShellFolders
...
...
@@ -330,8 +330,8 @@ public abstract class ShellFolder extends File {
public
void
sortChildren
(
final
List
<?
extends
File
>
files
)
{
// To avoid loads of synchronizations with Invoker and improve performance we
// synchronize the whole code of the sort method once
getInvoker
().
invoke
(
new
Callable
<
Void
>()
{
public
Void
call
()
throws
Exception
{
invoke
(
new
Callable
<
Void
>()
{
public
Void
call
()
{
Collections
.
sort
(
files
,
FILE_COMPARATOR
);
return
null
;
...
...
@@ -501,18 +501,62 @@ public abstract class ShellFolder extends File {
return
invoker
;
}
/**
* Invokes the {@code task} which doesn't throw checked exceptions
* from its {@code call} method. If invokation is interrupted then Thread.currentThread().isInterrupted() will
* be set and result will be {@code null}
*/
public
static
<
T
>
T
invoke
(
Callable
<
T
>
task
)
{
try
{
return
invoke
(
task
,
RuntimeException
.
class
);
}
catch
(
InterruptedException
e
)
{
return
null
;
}
}
/**
* Invokes the {@code task} which throws checked exceptions from its {@code call} method.
* If invokation is interrupted then Thread.currentThread().isInterrupted() will
* be set and InterruptedException will be thrown as well.
*/
public
static
<
T
,
E
extends
Throwable
>
T
invoke
(
Callable
<
T
>
task
,
Class
<
E
>
exceptionClass
)
throws
InterruptedException
,
E
{
try
{
return
getInvoker
().
invoke
(
task
);
}
catch
(
Exception
e
)
{
if
(
e
instanceof
RuntimeException
)
{
// Rethrow unchecked exceptions
throw
(
RuntimeException
)
e
;
}
if
(
e
instanceof
InterruptedException
)
{
// Set isInterrupted flag for current thread
Thread
.
currentThread
().
interrupt
();
// Rethrow InterruptedException
throw
(
InterruptedException
)
e
;
}
if
(
exceptionClass
.
isInstance
(
e
))
{
throw
exceptionClass
.
cast
(
e
);
}
throw
new
RuntimeException
(
"Unexpected error"
,
e
);
}
}
/**
* Interface allowing to invoke tasks in different environments on different platforms.
*/
public
static
interface
Invoker
{
/**
* Invokes a callable task. If the {@code task} throws a checked exception,
* it will be wrapped into a {@link RuntimeException}
* Invokes a callable task.
*
* @param task a task to invoke
* @throws Exception {@code InterruptedException} or an exception that was thrown from the {@code task}
* @return the result of {@code task}'s invokation
*/
<
T
>
T
invoke
(
Callable
<
T
>
task
);
<
T
>
T
invoke
(
Callable
<
T
>
task
)
throws
Exception
;
}
/**
...
...
src/share/classes/sun/awt/shell/ShellFolderManager.java
浏览文件 @
6e6c4321
/*
* Copyright 2000-200
8
Sun Microsystems, Inc. All Rights Reserved.
* Copyright 2000-200
9
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
...
...
@@ -108,12 +108,8 @@ class ShellFolderManager {
}
private
static
class
DirectInvoker
implements
ShellFolder
.
Invoker
{
public
<
T
>
T
invoke
(
Callable
<
T
>
task
)
{
try
{
return
task
.
call
();
}
catch
(
Exception
e
)
{
throw
new
RuntimeException
(
e
);
}
public
<
T
>
T
invoke
(
Callable
<
T
>
task
)
throws
Exception
{
return
task
.
call
();
}
}
}
src/share/classes/sun/swing/FilePane.java
浏览文件 @
6e6c4321
/*
* Copyright 2003-200
8
Sun Microsystems, Inc. All Rights Reserved.
* Copyright 2003-200
9
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
...
...
@@ -905,8 +904,8 @@ public class FilePane extends JPanel implements PropertyChangeListener {
@Override
public
void
sort
()
{
ShellFolder
.
getInvoker
().
invoke
(
new
Callable
<
Void
>()
{
public
Void
call
()
throws
Exception
{
ShellFolder
.
invoke
(
new
Callable
<
Void
>()
{
public
Void
call
()
{
DetailsTableRowSorter
.
super
.
sort
();
return
null
;
}
...
...
src/share/classes/sun/swing/MenuItemLayoutHelper.java
浏览文件 @
6e6c4321
...
...
@@ -718,10 +718,10 @@ public class MenuItemLayoutHelper {
}
private
void
alignRect
(
Rectangle
rect
,
int
alignment
,
int
origWidth
)
{
if
(
alignment
!=
SwingUtilities
.
LEF
T
)
{
if
(
alignment
==
SwingConstants
.
RIGH
T
)
{
rect
.
x
=
rect
.
x
+
rect
.
width
-
origWidth
;
rect
.
width
=
origWidth
;
}
rect
.
width
=
origWidth
;
}
protected
void
layoutIconAndTextInLabelRect
(
LayoutResult
lr
)
{
...
...
src/solaris/classes/sun/awt/X11/XRobotPeer.java
浏览文件 @
6e6c4321
...
...
@@ -27,6 +27,7 @@ package sun.awt.X11;
import
java.awt.*
;
import
java.awt.peer.*
;
import
sun.awt.X11GraphicsConfig
;
import
sun.awt.SunToolkit
;
class
XRobotPeer
implements
RobotPeer
{
private
X11GraphicsConfig
xgc
=
null
;
...
...
@@ -38,7 +39,8 @@ class XRobotPeer implements RobotPeer {
XRobotPeer
(
GraphicsConfiguration
gc
)
{
this
.
xgc
=
(
X11GraphicsConfig
)
gc
;
setup
();
SunToolkit
tk
=
(
SunToolkit
)
Toolkit
.
getDefaultToolkit
();
setup
(
tk
.
getNumberOfButtons
());
}
public
void
dispose
()
{
...
...
@@ -81,7 +83,7 @@ class XRobotPeer implements RobotPeer {
return
pixelArray
;
}
private
static
native
synchronized
void
setup
();
private
static
native
synchronized
void
setup
(
int
numberOfButtons
);
private
static
native
synchronized
void
mouseMoveImpl
(
X11GraphicsConfig
xgc
,
int
x
,
int
y
);
private
static
native
synchronized
void
mousePressImpl
(
int
buttons
);
...
...
src/solaris/native/sun/awt/awt_Robot.c
浏览文件 @
6e6c4321
...
...
@@ -51,9 +51,8 @@
extern
struct
X11GraphicsConfigIDs
x11GraphicsConfigIDs
;
extern
int32_t
getNumButtons
();
static
jint
*
masks
;
static
jint
num_buttons
;
static
int32_t
isXTestAvailable
()
{
int32_t
major_opcode
,
first_event
,
first_error
;
...
...
@@ -164,34 +163,34 @@ static XImage *getWindowImage(Display * display, Window window,
/*********************************************************************************************/
// this should be called from XRobotPeer constructor
JNIEXPORT
void
JNICALL
Java_sun_awt_X11_XRobotPeer_setup
(
JNIEnv
*
env
,
jclass
cls
)
{
Java_sun_awt_X11_XRobotPeer_setup
(
JNIEnv
*
env
,
jclass
cls
,
jint
numberOfButtons
)
{
int32_t
xtestAvailable
;
// this should be called from XRobotPeer constructor
DTRACE_PRINTLN
(
"RobotPeer: setup()"
);
num_buttons
=
numberOfButtons
;
jclass
inputEventClazz
=
(
*
env
)
->
FindClass
(
env
,
"java/awt/event/InputEvent"
);
jmethodID
getButtonDownMasksID
=
(
*
env
)
->
GetStaticMethodID
(
env
,
inputEventClazz
,
"getButtonDownMasks"
,
"()[I"
);
jintArray
obj
=
(
jintArray
)(
*
env
)
->
CallStaticObjectMethod
(
env
,
inputEventClazz
,
getButtonDownMasksID
);
jsize
len
=
(
*
env
)
->
GetArrayLength
(
env
,
obj
);
jint
*
tmp
=
(
*
env
)
->
GetIntArrayElements
(
env
,
obj
,
JNI_FALSE
);
masks
=
(
jint
*
)
malloc
(
sizeof
(
jint
)
*
len
);
masks
=
(
jint
*
)
malloc
(
sizeof
(
jint
)
*
num_buttons
);
if
(
masks
==
(
jint
*
)
NULL
)
{
JNU_ThrowOutOfMemoryError
((
JNIEnv
*
)
JNU_GetEnv
(
jvm
,
JNI_VERSION_1_2
),
NULL
);
goto
finally
;
}
int
i
;
for
(
i
=
0
;
i
<
len
;
i
++
)
{
for
(
i
=
0
;
i
<
num_buttons
;
i
++
)
{
masks
[
i
]
=
tmp
[
i
];
}
(
*
env
)
->
ReleaseIntArrayElements
(
env
,
obj
,
tmp
,
0
);
(
*
env
)
->
DeleteLocalRef
(
env
,
obj
);
DTRACE_PRINTLN
(
"RobotPeer: setup()"
);
AWT_LOCK
();
xtestAvailable
=
isXTestAvailable
();
DTRACE_PRINTLN1
(
"RobotPeer: XTest available = %d"
,
xtestAvailable
);
if
(
!
xtestAvailable
)
{
...
...
@@ -338,8 +337,6 @@ void mouseAction(JNIEnv *env,
{
AWT_LOCK
();
int32_t
num_buttons
=
getNumButtons
();
//from XToolkit.c
DTRACE_PRINTLN1
(
"RobotPeer: mouseAction(%i)"
,
buttonMask
);
DTRACE_PRINTLN1
(
"RobotPeer: mouseAction, press = %d"
,
isMousePress
);
...
...
src/windows/classes/sun/awt/shell/Win32ShellFolder2.java
浏览文件 @
6e6c4321
此差异已折叠。
点击以展开。
src/windows/classes/sun/awt/shell/Win32ShellFolderManager2.java
浏览文件 @
6e6c4321
/*
* Copyright 2003-200
8
Sun Microsystems, Inc. All Rights Reserved.
* Copyright 2003-200
9
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
...
...
@@ -58,10 +58,15 @@ public class Win32ShellFolderManager2 extends ShellFolderManager {
}
public
ShellFolder
createShellFolder
(
File
file
)
throws
FileNotFoundException
{
return
createShellFolder
(
getDesktop
(),
file
);
try
{
return
createShellFolder
(
getDesktop
(),
file
);
}
catch
(
InterruptedException
e
)
{
throw
new
FileNotFoundException
(
"Execution was interrupted"
);
}
}
static
Win32ShellFolder2
createShellFolder
(
Win32ShellFolder2
parent
,
File
file
)
throws
FileNotFoundException
{
static
Win32ShellFolder2
createShellFolder
(
Win32ShellFolder2
parent
,
File
file
)
throws
FileNotFoundException
,
InterruptedException
{
long
pIDL
;
try
{
pIDL
=
parent
.
parseDisplayName
(
file
.
getCanonicalPath
());
...
...
@@ -77,7 +82,8 @@ public class Win32ShellFolderManager2 extends ShellFolderManager {
return
folder
;
}
static
Win32ShellFolder2
createShellFolderFromRelativePIDL
(
Win32ShellFolder2
parent
,
long
pIDL
)
{
static
Win32ShellFolder2
createShellFolderFromRelativePIDL
(
Win32ShellFolder2
parent
,
long
pIDL
)
throws
InterruptedException
{
// Walk down this relative pIDL, creating new nodes for each of the entries
while
(
pIDL
!=
0
)
{
long
curPIDL
=
Win32ShellFolder2
.
copyFirstPIDLEntry
(
pIDL
);
...
...
@@ -108,7 +114,9 @@ public class Win32ShellFolderManager2 extends ShellFolderManager {
try
{
desktop
=
new
Win32ShellFolder2
(
DESKTOP
);
}
catch
(
IOException
e
)
{
desktop
=
null
;
// Ignore error
}
catch
(
InterruptedException
e
)
{
// Ignore error
}
}
return
desktop
;
...
...
@@ -119,7 +127,9 @@ public class Win32ShellFolderManager2 extends ShellFolderManager {
try
{
drives
=
new
Win32ShellFolder2
(
DRIVES
);
}
catch
(
IOException
e
)
{
drives
=
null
;
// Ignore error
}
catch
(
InterruptedException
e
)
{
// Ignore error
}
}
return
drives
;
...
...
@@ -132,8 +142,10 @@ public class Win32ShellFolderManager2 extends ShellFolderManager {
if
(
path
!=
null
)
{
recent
=
createShellFolder
(
getDesktop
(),
new
File
(
path
));
}
}
catch
(
InterruptedException
e
)
{
// Ignore error
}
catch
(
IOException
e
)
{
recent
=
null
;
// Ignore error
}
}
return
recent
;
...
...
@@ -144,7 +156,9 @@ public class Win32ShellFolderManager2 extends ShellFolderManager {
try
{
network
=
new
Win32ShellFolder2
(
NETWORK
);
}
catch
(
IOException
e
)
{
network
=
null
;
// Ignore error
}
catch
(
InterruptedException
e
)
{
// Ignore error
}
}
return
network
;
...
...
@@ -164,8 +178,10 @@ public class Win32ShellFolderManager2 extends ShellFolderManager {
personal
.
setIsPersonal
();
}
}
}
catch
(
InterruptedException
e
)
{
// Ignore error
}
catch
(
IOException
e
)
{
personal
=
null
;
// Ignore error
}
}
return
personal
;
...
...
@@ -267,6 +283,9 @@ public class Win32ShellFolderManager2 extends ShellFolderManager {
}
}
catch
(
IOException
e
)
{
// Skip this value
}
catch
(
InterruptedException
e
)
{
// Return empty result
return
new
File
[
0
];
}
}
while
(
value
!=
null
);
...
...
@@ -476,33 +495,39 @@ public class Win32ShellFolderManager2 extends ShellFolderManager {
return
comThread
;
}
public
<
T
>
T
invoke
(
Callable
<
T
>
task
)
{
try
{
if
(
Thread
.
currentThread
()
==
comThread
)
{
// if it's already called from the COM
// thread, we don't need to delegate the task
return
task
.
call
();
}
else
{
while
(
true
)
{
Future
<
T
>
future
=
submit
(
task
);
try
{
return
future
.
get
();
}
catch
(
InterruptedException
e
)
{
// Repeat the attempt
future
.
cancel
(
true
);
}
}
}
}
catch
(
Exception
e
)
{
Throwable
cause
=
(
e
instanceof
ExecutionException
)
?
e
.
getCause
()
:
e
;
if
(
cause
instanceof
RuntimeException
)
{
throw
(
RuntimeException
)
cause
;
public
<
T
>
T
invoke
(
Callable
<
T
>
task
)
throws
Exception
{
if
(
Thread
.
currentThread
()
==
comThread
)
{
// if it's already called from the COM
// thread, we don't need to delegate the task
return
task
.
call
();
}
else
{
Future
<
T
>
future
;
try
{
future
=
submit
(
task
);
}
catch
(
RejectedExecutionException
e
)
{
throw
new
InterruptedException
(
e
.
getMessage
());
}
if
(
cause
instanceof
Error
)
{
throw
(
Error
)
cause
;
try
{
return
future
.
get
();
}
catch
(
InterruptedException
e
)
{
future
.
cancel
(
true
);
throw
e
;
}
catch
(
ExecutionException
e
)
{
Throwable
cause
=
e
.
getCause
();
if
(
cause
instanceof
Exception
)
{
throw
(
Exception
)
cause
;
}
if
(
cause
instanceof
Error
)
{
throw
(
Error
)
cause
;
}
throw
new
RuntimeException
(
"Unexpected error"
,
cause
);
}
throw
new
RuntimeException
(
cause
);
}
}
}
...
...
src/windows/native/sun/windows/awt_Component.cpp
浏览文件 @
6e6c4321
...
...
@@ -3739,11 +3739,12 @@ void AwtComponent::SetCandidateWindow(int iCandType, int x, int y)
MsgRouting
AwtComponent
::
WmImeSetContext
(
BOOL
fSet
,
LPARAM
*
lplParam
)
{
//
This message causes native status window shown even it is disabled. So don't
//
let DefWindowProc process this message if this IMC is disabled
.
//
If the Windows input context is disabled, do not let Windows
//
display any UIs
.
HIMC
hIMC
=
ImmGetContext
();
if
(
hIMC
==
NULL
)
{
return
mrConsume
;
*
lplParam
=
0
;
return
mrDoDefault
;
}
if
(
fSet
)
{
...
...
test/java/awt/EventQueue/6638195/bug6638195.java
浏览文件 @
6e6c4321
/*
* Copyright 2008 Sun Microsystems, Inc. All Rights Reserved.
* Copyright 2008
-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
...
...
@@ -23,7 +23,7 @@
/* @test
*
* @bug 6638195
* @bug 6638195
6844297
* @author Igor Kushnirskiy
* @summary tests if EventQueueDelegate.Delegate is invoked.
*/
...
...
@@ -47,11 +47,22 @@ public class bug6638195 {
}
private
static
void
runTest
(
MyEventQueueDelegate
delegate
)
throws
Exception
{
// We need an empty runnable here, so the next event is
// processed with a new EventQueueDelegate. See 6844297
// for details
EventQueue
.
invokeLater
(
new
Runnable
()
{
public
void
run
()
{
}
});
// The following event is expected to be processed by
// the EventQueueDelegate instance
EventQueue
.
invokeLater
(
new
Runnable
()
{
public
void
run
()
{
}
});
// Finally, proceed on the main thread
final
CountDownLatch
latch
=
new
CountDownLatch
(
1
);
EventQueue
.
invokeLater
(
new
Runnable
()
{
...
...
@@ -60,7 +71,7 @@ public class bug6638195 {
}
});
latch
.
await
();
if
(!
delegate
.
allInvoked
())
{
if
(!
delegate
.
allInvoked
())
{
throw
new
RuntimeException
(
"failed"
);
}
}
...
...
@@ -125,6 +136,7 @@ public class bug6638195 {
return
objectMap
;
}
static
class
MyEventQueueDelegate
implements
EventQueueDelegate
.
Delegate
{
private
volatile
boolean
getNextEventInvoked
=
false
;
private
volatile
boolean
beforeDispatchInvoked
=
false
;
...
...
test/java/awt/Frame/FrameSize/TestFrameSize.java
浏览文件 @
6e6c4321
/*
* Copyright 2009 Red Hat, Inc. All Rights Reserved.
* Portions 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
...
...
@@ -37,35 +38,62 @@
* Test fails if size of window is wrong
*/
import
java.awt.Dimension
;
import
java.awt.Frame
;
import
java.awt.*
;
public
class
TestFrameSize
{
static
Dimension
desiredDimensions
=
new
Dimension
(
200
,
200
);
static
int
ERROR_MARGIN
=
15
;
static
Frame
mainWindow
;
public
static
void
drawGui
()
{
mainWindow
=
new
Frame
(
""
);
mainWindow
.
setPreferredSize
(
desiredDimensions
);
mainWindow
.
pack
();
Dimension
actualDimensions
=
mainWindow
.
getSize
();
System
.
out
.
println
(
"Desired dimensions: "
+
desiredDimensions
.
toString
());
System
.
out
.
println
(
"Actual dimensions: "
+
actualDimensions
.
toString
());
if
(
Math
.
abs
(
actualDimensions
.
height
-
desiredDimensions
.
height
)
>
ERROR_MARGIN
)
{
throw
new
RuntimeException
(
"Incorrect widow size"
);
}
static
Dimension
desiredDimensions
=
new
Dimension
(
200
,
200
);
static
Frame
mainWindow
;
private
static
Dimension
getClientSize
(
Frame
window
)
{
Dimension
size
=
window
.
getSize
();
Insets
insets
=
window
.
getInsets
();
System
.
out
.
println
(
"getClientSize() for "
+
window
);
System
.
out
.
println
(
" size: "
+
size
);
System
.
out
.
println
(
" insets: "
+
insets
);
return
new
Dimension
(
size
.
width
-
insets
.
left
-
insets
.
right
,
size
.
height
-
insets
.
top
-
insets
.
bottom
);
}
public
static
void
drawGui
()
{
mainWindow
=
new
Frame
(
""
);
mainWindow
.
setPreferredSize
(
desiredDimensions
);
mainWindow
.
pack
();
Dimension
actualDimensions
=
mainWindow
.
getSize
();
System
.
out
.
println
(
"Desired dimensions: "
+
desiredDimensions
.
toString
());
System
.
out
.
println
(
"Actual dimensions: "
+
actualDimensions
.
toString
());
if
(!
actualDimensions
.
equals
(
desiredDimensions
))
{
throw
new
RuntimeException
(
"Incorrect widow size"
);
}
// pack() guarantees to preserve the size of the client area after
// showing the window.
Dimension
clientSize1
=
getClientSize
(
mainWindow
);
System
.
out
.
println
(
"Client size before showing: "
+
clientSize1
);
mainWindow
.
setVisible
(
true
);
((
sun
.
awt
.
SunToolkit
)
Toolkit
.
getDefaultToolkit
()).
realSync
();
Dimension
clientSize2
=
getClientSize
(
mainWindow
);
System
.
out
.
println
(
"Client size after showing: "
+
clientSize2
);
if
(!
clientSize2
.
equals
(
clientSize1
))
{
throw
new
RuntimeException
(
"Incorrect client area size."
);
}
}
public
static
void
main
(
String
[]
args
)
{
try
{
drawGui
();
}
finally
{
if
(
mainWindow
!=
null
)
{
mainWindow
.
dispose
();
}
}
public
static
void
main
(
String
[]
args
)
{
try
{
drawGui
();
}
finally
{
if
(
mainWindow
!=
null
)
{
mainWindow
.
dispose
();
}
}
}
}
test/javax/swing/JInternalFrame/Test6505027.java
0 → 100644
浏览文件 @
6e6c4321
/*
* 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 6505027
* @summary Tests focus problem inside internal frame
* @author Sergey Malenkov
*/
import
java.awt.AWTException
;
import
java.awt.BorderLayout
;
import
java.awt.Component
;
import
java.awt.Container
;
import
java.awt.KeyboardFocusManager
;
import
java.awt.Point
;
import
java.awt.Robot
;
import
java.awt.event.InputEvent
;
import
javax.swing.DefaultCellEditor
;
import
javax.swing.JComboBox
;
import
javax.swing.JDesktopPane
;
import
javax.swing.JFrame
;
import
javax.swing.JInternalFrame
;
import
javax.swing.JScrollPane
;
import
javax.swing.JTable
;
import
javax.swing.JTextField
;
import
javax.swing.SwingUtilities
;
import
javax.swing.WindowConstants
;
import
javax.swing.table.DefaultTableModel
;
import
javax.swing.table.TableColumn
;
public
class
Test6505027
implements
Runnable
{
private
static
final
boolean
INTERNAL
=
true
;
private
static
final
boolean
TERMINATE
=
true
;
private
static
final
int
WIDTH
=
450
;
private
static
final
int
HEIGHT
=
200
;
private
static
final
int
OFFSET
=
10
;
private
static
final
long
PAUSE
=
2048L
;
private
static
final
String
[]
COLUMNS
=
{
"Size"
,
"Shape"
};
// NON-NLS
private
static
final
String
[]
ITEMS
=
{
"a"
,
"b"
,
"c"
,
"d"
};
// NON-NLS
private
static
final
String
KEY
=
"terminateEditOnFocusLost"
;
// NON-NLS
public
static
void
main
(
String
[]
args
)
{
SwingUtilities
.
invokeLater
(
new
Test6505027
());
Component
component
=
null
;
while
(
component
==
null
)
{
try
{
Thread
.
sleep
(
PAUSE
);
}
catch
(
InterruptedException
exception
)
{
// ignore interrupted exception
}
component
=
KeyboardFocusManager
.
getCurrentKeyboardFocusManager
().
getFocusOwner
();
}
if
(!
component
.
getClass
().
equals
(
JComboBox
.
class
))
{
throw
new
Error
(
"unexpected focus owner: "
+
component
);
}
SwingUtilities
.
getWindowAncestor
(
component
).
dispose
();
}
private
JTable
table
;
private
Point
point
;
public
void
run
()
{
if
(
this
.
table
==
null
)
{
JFrame
main
=
new
JFrame
();
main
.
setSize
(
WIDTH
+
OFFSET
*
3
,
HEIGHT
+
OFFSET
*
5
);
main
.
setLocationRelativeTo
(
null
);
main
.
setDefaultCloseOperation
(
WindowConstants
.
DISPOSE_ON_CLOSE
);
main
.
setVisible
(
true
);
Container
container
=
main
;
if
(
INTERNAL
)
{
JInternalFrame
frame
=
new
JInternalFrame
();
frame
.
setBounds
(
OFFSET
,
OFFSET
,
WIDTH
,
HEIGHT
);
frame
.
setVisible
(
true
);
JDesktopPane
desktop
=
new
JDesktopPane
();
desktop
.
add
(
frame
,
new
Integer
(
1
));
container
.
add
(
desktop
);
container
=
frame
;
}
this
.
table
=
new
JTable
(
new
DefaultTableModel
(
COLUMNS
,
2
));
if
(
TERMINATE
)
{
this
.
table
.
putClientProperty
(
KEY
,
Boolean
.
TRUE
);
}
TableColumn
column
=
this
.
table
.
getColumn
(
COLUMNS
[
1
]);
column
.
setCellEditor
(
new
DefaultCellEditor
(
new
JComboBox
(
ITEMS
)));
container
.
add
(
BorderLayout
.
NORTH
,
new
JTextField
());
container
.
add
(
BorderLayout
.
CENTER
,
new
JScrollPane
(
this
.
table
));
SwingUtilities
.
invokeLater
(
this
);
}
else
if
(
this
.
point
==
null
)
{
this
.
point
=
this
.
table
.
getCellRect
(
1
,
1
,
false
).
getLocation
();
SwingUtilities
.
convertPointToScreen
(
this
.
point
,
this
.
table
);
SwingUtilities
.
invokeLater
(
this
);
}
else
{
try
{
Robot
robot
=
new
Robot
();
robot
.
mouseMove
(
this
.
point
.
x
+
1
,
this
.
point
.
y
+
1
);
robot
.
mousePress
(
InputEvent
.
BUTTON1_MASK
);
}
catch
(
AWTException
exception
)
{
throw
new
Error
(
"unexpected exception"
,
exception
);
}
}
}
}
test/javax/swing/JInternalFrame/Test6802868.java
0 → 100644
浏览文件 @
6e6c4321
/*
* 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 6802868
* @summary JInternalFrame is not maximized when maximized parent frame
* @author Alexander Potochkin
*/
import
sun.awt.SunToolkit
;
import
java.awt.Dimension
;
import
java.awt.Point
;
import
java.awt.Robot
;
import
java.awt.Toolkit
;
import
java.beans.PropertyVetoException
;
import
javax.swing.JDesktopPane
;
import
javax.swing.JFrame
;
import
javax.swing.JInternalFrame
;
import
javax.swing.SwingUtilities
;
public
class
Test6802868
{
static
JInternalFrame
jif
;
static
JFrame
frame
;
static
Dimension
size
;
static
Point
location
;
public
static
void
main
(
String
[]
args
)
throws
Exception
{
Robot
robot
=
new
Robot
();
robot
.
setAutoDelay
(
20
);
SunToolkit
toolkit
=
(
SunToolkit
)
Toolkit
.
getDefaultToolkit
();
SwingUtilities
.
invokeAndWait
(
new
Runnable
()
{
public
void
run
()
{
frame
=
new
JFrame
();
frame
.
setDefaultCloseOperation
(
JFrame
.
EXIT_ON_CLOSE
);
JDesktopPane
jdp
=
new
JDesktopPane
();
frame
.
getContentPane
().
add
(
jdp
);
jif
=
new
JInternalFrame
(
"Title"
,
true
,
true
,
true
,
true
);
jdp
.
add
(
jif
);
jif
.
setVisible
(
true
);
frame
.
setSize
(
200
,
200
);
frame
.
setLocationRelativeTo
(
null
);
frame
.
setVisible
(
true
);
try
{
jif
.
setMaximum
(
true
);
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
}
}
});
toolkit
.
realSync
();
SwingUtilities
.
invokeAndWait
(
new
Runnable
()
{
public
void
run
()
{
size
=
jif
.
getSize
();
frame
.
setSize
(
300
,
300
);
}
});
toolkit
.
realSync
();
SwingUtilities
.
invokeAndWait
(
new
Runnable
()
{
public
void
run
()
{
if
(
jif
.
getSize
().
equals
(
size
))
{
throw
new
RuntimeException
(
"InternalFrame hasn't changed its size"
);
}
try
{
jif
.
setIcon
(
true
);
}
catch
(
PropertyVetoException
e
)
{
e
.
printStackTrace
();
}
location
=
jif
.
getDesktopIcon
().
getLocation
();
frame
.
setSize
(
400
,
400
);
}
});
toolkit
.
realSync
();
SwingUtilities
.
invokeAndWait
(
new
Runnable
()
{
public
void
run
()
{
if
(
jif
.
getDesktopIcon
().
getLocation
().
equals
(
location
))
{
throw
new
RuntimeException
(
"JDesktopIcon hasn't moved"
);
}
}
});
}
}
test/javax/swing/JScrollPane/Test6526631.java
0 → 100644
浏览文件 @
6e6c4321
/*
* 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 6526631
* @summary Resizes right-oriented scroll pane
* @author Sergey Malenkov
* @library ..
* @build SwingTest
* @run main Test6526631
*/
import
java.awt.Dimension
;
import
javax.swing.JFrame
;
import
javax.swing.JScrollBar
;
import
javax.swing.JScrollPane
;
import
javax.swing.JTextArea
;
import
javax.swing.JViewport
;
import
static
java
.
awt
.
ComponentOrientation
.
RIGHT_TO_LEFT
;
public
class
Test6526631
{
private
static
final
int
COLS
=
90
;
private
static
final
int
ROWS
=
50
;
private
static
final
int
OFFSET
=
10
;
public
static
void
main
(
String
[]
args
)
{
SwingTest
.
start
(
Test6526631
.
class
);
}
private
final
JScrollPane
pane
;
private
final
JFrame
frame
;
public
Test6526631
(
JFrame
frame
)
{
this
.
pane
=
new
JScrollPane
(
new
JTextArea
(
ROWS
,
COLS
));
this
.
pane
.
setComponentOrientation
(
RIGHT_TO_LEFT
);
this
.
frame
=
frame
;
this
.
frame
.
add
(
this
.
pane
);
}
private
void
update
(
int
offset
)
{
Dimension
size
=
this
.
frame
.
getSize
();
size
.
width
+=
offset
;
this
.
frame
.
setSize
(
size
);
}
public
void
validateFirst
()
{
validateThird
();
update
(
OFFSET
);
}
public
void
validateSecond
()
{
validateThird
();
update
(-
OFFSET
);
}
public
void
validateThird
()
{
JViewport
viewport
=
this
.
pane
.
getViewport
();
JScrollBar
scroller
=
this
.
pane
.
getHorizontalScrollBar
();
if
(!
scroller
.
getComponentOrientation
().
equals
(
RIGHT_TO_LEFT
))
{
throw
new
IllegalStateException
(
"unexpected component orientation"
);
}
int
value
=
scroller
.
getValue
();
if
(
value
!=
0
)
{
throw
new
IllegalStateException
(
"unexpected scroll value"
);
}
int
extent
=
viewport
.
getExtentSize
().
width
;
if
(
extent
!=
scroller
.
getVisibleAmount
())
{
throw
new
IllegalStateException
(
"unexpected visible amount"
);
}
int
size
=
viewport
.
getViewSize
().
width
;
if
(
size
!=
scroller
.
getMaximum
())
{
throw
new
IllegalStateException
(
"unexpected maximum"
);
}
int
pos
=
size
-
extent
-
value
;
if
(
pos
!=
viewport
.
getViewPosition
().
x
)
{
throw
new
IllegalStateException
(
"unexpected position"
);
}
}
}
test/javax/swing/SwingTest.java
0 → 100644
浏览文件 @
6e6c4321
/*
* 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.
*/
import
java.io.PrintWriter
;
import
java.lang.reflect.InvocationTargetException
;
import
java.lang.reflect.Method
;
import
java.lang.reflect.Modifier
;
import
java.util.Comparator
;
import
java.util.Iterator
;
import
java.util.Set
;
import
java.util.TreeSet
;
import
javax.swing.JFrame
;
import
static
javax
.
swing
.
SwingUtilities
.
invokeLater
;
/**
* SwingTestHelper is a utility class for writing regression tests
* that require interacting with the UI.
*
* @author Sergey A. Malenkov
*/
final
class
SwingTest
implements
Runnable
{
private
static
final
int
WIDTH
=
640
;
private
static
final
int
HEIGHT
=
480
;
public
static
void
start
(
Class
<?>
type
)
{
new
SwingTest
(
type
).
start
();
}
private
final
PrintWriter
writer
=
new
PrintWriter
(
System
.
out
,
true
);
private
Class
<?>
type
;
private
JFrame
frame
;
private
Iterator
<
Method
>
methods
;
private
Object
object
;
private
Method
method
;
private
Throwable
error
;
private
SwingTest
(
Class
<?>
type
)
{
this
.
type
=
type
;
}
public
void
run
()
{
synchronized
(
this
.
writer
)
{
if
(
this
.
error
!=
null
)
{
this
.
frame
.
dispose
();
this
.
frame
=
null
;
}
else
if
(
this
.
object
==
null
)
{
invoke
();
Set
<
Method
>
methods
=
new
TreeSet
<
Method
>(
new
Comparator
<
Method
>()
{
public
int
compare
(
Method
first
,
Method
second
)
{
return
first
.
getName
().
compareTo
(
second
.
getName
());
}
});
for
(
Method
method
:
this
.
type
.
getMethods
())
{
if
(
method
.
getDeclaringClass
().
equals
(
this
.
type
))
{
if
(
method
.
getReturnType
().
equals
(
void
.
class
))
{
if
(
0
==
method
.
getParameterTypes
().
length
)
{
methods
.
add
(
method
);
}
}
}
}
this
.
methods
=
methods
.
iterator
();
}
else
if
(
this
.
method
!=
null
)
{
invoke
();
}
else
if
(
this
.
methods
.
hasNext
())
{
this
.
method
=
this
.
methods
.
next
();
}
else
{
this
.
frame
.
dispose
();
this
.
frame
=
null
;
this
.
type
=
null
;
}
this
.
writer
.
notifyAll
();
}
}
private
void
start
()
{
synchronized
(
this
.
writer
)
{
while
(
this
.
type
!=
null
)
{
if
((
this
.
method
!=
null
)
&&
Modifier
.
isStatic
(
this
.
method
.
getModifiers
()))
{
invoke
();
}
else
{
invokeLater
(
this
);
try
{
this
.
writer
.
wait
();
}
catch
(
InterruptedException
exception
)
{
exception
.
printStackTrace
(
this
.
writer
);
}
}
if
((
this
.
frame
==
null
)
&&
(
this
.
error
!=
null
))
{
throw
new
Error
(
"unexpected error"
,
this
.
error
);
}
}
}
}
private
void
invoke
()
{
try
{
if
(
this
.
method
!=
null
)
{
this
.
writer
.
println
(
this
.
method
);
this
.
method
.
invoke
(
this
.
object
);
this
.
method
=
null
;
}
else
{
this
.
writer
.
println
(
this
.
type
);
this
.
frame
=
new
JFrame
(
this
.
type
.
getSimpleName
());
this
.
frame
.
setSize
(
WIDTH
,
HEIGHT
);
this
.
frame
.
setLocationRelativeTo
(
null
);
this
.
object
=
this
.
type
.
getConstructor
(
JFrame
.
class
).
newInstance
(
this
.
frame
);
this
.
frame
.
setVisible
(
true
);
}
}
catch
(
NoSuchMethodException
exception
)
{
this
.
error
=
exception
;
}
catch
(
SecurityException
exception
)
{
this
.
error
=
exception
;
}
catch
(
IllegalAccessException
exception
)
{
this
.
error
=
exception
;
}
catch
(
IllegalArgumentException
exception
)
{
this
.
error
=
exception
;
}
catch
(
InstantiationException
exception
)
{
this
.
error
=
exception
;
}
catch
(
InvocationTargetException
exception
)
{
this
.
error
=
exception
.
getTargetException
();
}
}
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录