Java按钮鼠标点击事件在使用showDialog时返回错误



这是我的代码:

import java.io.File;
import java.io.FileFilter;
import java.io.FilenameFilter;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.stage.DirectoryChooser;
import javax.swing.table.DefaultTableModel;
import javax.swing.JFileChooser;
import static javax.swing.JOptionPane.showMessageDialog;

private void btnOpenMouseClicked(java.awt.event.MouseEvent evt) {                                     

showMessageDialog(null, "Mouse Clicked");
DirectoryChooser dirdir = new DirectoryChooser(); 

File f1 = dirdir.showDialog(null);  // this is the problem
/*
FilenameFilter filter = (File f, String name1) -> name1.endsWith(".txt");

String[] pathnames = f1.list();

DefaultTableModel  model = (DefaultTableModel)jTableFolderContent.getModel(); 
model.setColumnIdentifiers(new String[] {"Files Names"});
Object[] row = new Object[1];

// For each pathname in the pathnames array
for (String pathname : pathnames) {
// Print the names of files and directories
if(filter.accept(f1,pathname)){
row[0] = pathname;
model.addRow(row);
}   
} 
*/
} 

返回错误:

jfx项目运行:[echo]使用平台C:\Program Files\Java\jdk1.8.0_281/bin/Java执行C:\Users\MSKW7\Documents\NetBeansProjects\msk水印\dist\run456914622\msk水印.jar[java]MyPath=C:\Users\MSKW7\Documents\NetBeansProjects\msk水印[java]线程中的异常";AWT-EventQueue-0";java.lang.IollegalStateException:只允许在事件线程上执行此操作;currentThread=AWT-EventQueue-0[java],网址为com.sun.glass.ui.Application.checkEventThread(Application.java:443([java],网址为com.sun.glass.ui.CommonDialogs.showFolderChooser(CommonDialogs.java:225([java],网址:com.sun.javafx.tk.quantum.QuantumToolkit.showDirectoryChooser(QuantumToolkit.java:1585([java]在javafx.sstage.DirectoryChooser.showDialog(DirectoryChoose.java:103([java]位于msk.watermark.frmHome.btOpenMouseClickd(frmHome.java:127([java]位于msk.watermark.frmHome.access$000(frmHome.java:23([java]位于msk.watermark.frmHome$1.mouseClicked(frmHome.java:57([java]在java.awt.AWTEventMulticast.mouseClicked(AWTEventmulticast.java:270([java]在java.awt.Component.processMouseEvent(Component.java:6542([java]在javax.swing.JComponent.processMouseEvent(JComponent.java:3324([java]在java.awt.Component.processEvent(Component.java:6304([java]位于java.awt.Container.processEvent(Container.java:2239([java]位于java.awt.Component.dispatchEventImpl(Component.java:4889([java]位于java.awt.Container.dispatchEventImpl(Container.java:2297([java]在java.awt.Component.dispatchEvent(Component.java:4711([java]位于java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4904([java]位于java.awt.LightweightDispatcher.processMouseEvent(Container.java:44544([java]位于java.awt.LightweightDispatcher.dispatchEvent(Container.java:4476([java]位于java.awt.Container.dispatchEventImpl(Container.java:2283([java]位于java.awt.Window.dispatchEventImpl(Window.java:2746([java]在java.awt.Component.dispatchEvent(Component.java:4711([java]在java.awt.EventQueue.dispatchEventImpl(EventQueue.java:760([java]在java.awt.EventQueue.access$500(EventQueue.java:97([java]位于java.awt.EventQueue$3.run(EventQueue.java:709([java]在java.awt.EventQueue$3.run(EventQueue.java:703([java]位于java.security.AccessController.doPrivileged(本机方法([java]位于java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:74([java]位于java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:84([java]位于java.awt.EventQueue$4.run(EventQueue.java:733([java]在java.awt.EventQueue$4.run(EventQueue.java:731([java]位于java.security.AccessController.doPrivileged(本机方法([java]位于java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:74([java]在java.awt.EventQueue.dispatchEvent(EventQueue.java:730([java]在java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:205([java]在java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116([java]在java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatch线程.java:105([java]在java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101([java]在java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93([java]在java.awt.EventDispatchThread.run(EventDispatchThread.java:82(

您正试图在swing消息循环中使用JavaFX对话框。由错误消息"指示";此操作仅在事件线程上被允许";。

您需要创建一个JavaFX应用程序或坚持使用swing/awt组件

提示:javax.swing.JFileChooser

最新更新