--- old/src/java.desktop/windows/native/libawt/windows/awt_FileDialog.cpp 2016-05-20 18:05:51.130395500 +0300 +++ new/src/java.desktop/windows/native/libawt/windows/awt_FileDialog.cpp 2016-05-20 18:05:50.627894700 +0300 @@ -349,9 +349,9 @@ // show the Win32 file dialog if (mode == java_awt_FileDialog_LOAD) { - result = AwtFileDialog::GetOpenFileName(&ofn); + result = ::GetOpenFileName(&ofn); } else { - result = AwtFileDialog::GetSaveFileName(&ofn); + result = ::GetSaveFileName(&ofn); } // Fix for 4181310: FileDialog does not show up. // If the dialog is not shown because of invalid file name @@ -361,9 +361,9 @@ if (dlgerr == FNERR_INVALIDFILENAME) { _tcscpy_s(fileBuffer, bufferLimit, TEXT("")); if (mode == java_awt_FileDialog_LOAD) { - result = AwtFileDialog::GetOpenFileName(&ofn); + result = ::GetOpenFileName(&ofn); } else { - result = AwtFileDialog::GetSaveFileName(&ofn); + result = ::GetSaveFileName(&ofn); } } } @@ -422,22 +422,6 @@ delete[] ofn.lpstrFile; } -BOOL -AwtFileDialog::GetOpenFileName(LPOPENFILENAME data) { - return static_cast(reinterpret_cast( - AwtToolkit::GetInstance().InvokeFunction((void*(*)(void*)) - ::GetOpenFileName, data))); - -} - -BOOL -AwtFileDialog::GetSaveFileName(LPOPENFILENAME data) { - return static_cast(reinterpret_cast( - AwtToolkit::GetInstance().InvokeFunction((void *(*)(void *)) - ::GetSaveFileName, data))); - -} - BOOL AwtFileDialog::InheritsNativeMouseWheelBehavior() {return true;} void AwtFileDialog::_DisposeOrHide(void *param) @@ -585,9 +569,10 @@ */ jobject peerGlobal = env->NewGlobalRef(peer); - AwtToolkit::GetInstance().InvokeFunction(AwtFileDialog::Show, peerGlobal); - - env->DeleteGlobalRef(peerGlobal); + if (!AwtToolkit::GetInstance().PostMessage(WM_AWT_INVOKE_METHOD, + (WPARAM)AwtFileDialog::Show, (LPARAM)peerGlobal)) { + env->DeleteGlobalRef(peerGlobal); + } CATCH_BAD_ALLOC; } --- old/src/java.desktop/windows/native/libawt/windows/awt_FileDialog.h 2016-05-20 18:05:54.427902900 +0300 +++ new/src/java.desktop/windows/native/libawt/windows/awt_FileDialog.h 2016-05-20 18:05:53.907901600 +0300 @@ -60,9 +60,6 @@ static void Initialize(JNIEnv *env, jstring filterDescription); static void Show(void *peer); - static BOOL GetOpenFileName(LPOPENFILENAME); - static BOOL GetSaveFileName(LPOPENFILENAME); - virtual BOOL InheritsNativeMouseWheelBehavior(); // some methods called on Toolkit thread --- /dev/null 2016-05-20 18:05:57.000000000 +0300 +++ new/test/java/awt/FileDialog/DeleteInsideFileDialog/DeleteInsideFileDialogTest.java 2016-05-20 18:05:56.522911700 +0300 @@ -0,0 +1,61 @@ +/* + * Copyright (c) 2016, Oracle and/or its affiliates. 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 Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* + @test + @bug 8075516 + @requires os.family=="windows" + @summary Deleting a file from either the open or save java.awt.FileDialog + hangs. + @run main/manual DeleteInsideFileDialogTest +*/ + +import java.awt.*; + +public class DeleteInsideFileDialogTest { + + public static void main(String[] args) { + + String instructions = + "1) Create a file using any file manager\n" + + "2) Delete it in the opened File Dialog window using the " + + "right click popup menu\n" + + "3) Select any file in the File Dialog and press OK (If this " + + "is not possible the test fails)\n"; + + Frame f = new Frame("Instructions"); + f.setLayout(new BorderLayout()); + f.add(new TextArea(instructions), BorderLayout.CENTER); + f.pack(); + f.setLocation(100, 500); + f.setVisible(true); + + FileDialog fd = new FileDialog (new Frame()); + fd.setVisible(true); + if (fd.getFile() == null) { + fd.dispose(); + throw new RuntimeException("Failed"); + } + fd.dispose(); + } +}