作者H45 (!H45)
看板java
标题Re: [问题] Thread with JFileChooser
时间Thu Apr 2 10:47:12 2009
: 我写了个Swing的介面, 有个JButton在接收click的event之後,
: 会使用Thread开启JFileChooser, 但始终开不起来Orz...
: 只是停用Thread後, 就可以了@@...
我 JFileChooser 开的起来
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import javax.swing.JButton;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
public class TestDrive extends JFrame{
private JButton jButton1 = new JButton("Button");
public static void main(String[] args) {
new TestDrive().setVisible(true);
}
public TestDrive() {
setSize(640, 480);
getContentPane().add(jButton1);
jButton1.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
Thread t = new Thread() {
public void run() {
open();
}
};
t.start();
}
});
}
public void open() {
JFileChooser chooser =new JFileChooser(".");
chooser.setFileSelectionMode(JFileChooser.FILES_ONLY);
chooser.setMultiSelectionEnabled(true); //only choose file(s)
int result = chooser.showOpenDialog(this);
System.out.println(result);
if (result == JFileChooser.APPROVE_OPTION) {
try {
for(File x:chooser.getSelectedFiles()) {
showChoose(x);
}
}
catch (Exception e) { }
}
}
private void showChoose(File x) {
JOptionPane.showMessageDialog(null, x);
}
}
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.116.247.13
1F:推 zeat:Orz...居然跟public有关...我习惯同一个package内的方法 04/02 14:03
2F:→ zeat:都是用default...现在改成public, 就好了O___Q 04/02 14:04
3F:推 sbrhsieh:我想事情不是你想的那样...可以的话提供一份可以重制出 04/02 14:25
4F:→ sbrhsieh:你描述的现象的程式码,让大家看看症结在哪 04/02 14:28
5F:推 zeat:我的问题有放程式码, 那个open是default level, 我学习H45大 04/02 14:32
6F:→ zeat:师, 将open改成public level就可以显示JFileChooser了@__@ 04/02 14:33
7F:推 sbrhsieh:你给的程式码太片段了。真的不会是跟 access level 有关 04/02 14:48
8F:推 zeat:好像真的不是access level的问题Orz... 我放上完整的了@@ 04/02 15:13
9F:推 undeadj:不要在非EDT上建造gui 04/03 10:02
10F:推 zeat:EDT是指Event Dispatch Thread吗? 04/03 13:22
11F:推 undeadj:对,建造元件不会费时的话,就不需要用到thread 04/03 16:09
12F:→ undeadj:费时的话,请使用SwingUtilities.invokeLater 04/03 16:11
13F:推 zeat:但是我是希望在open JFileChooser後还可以同步做其他的事 04/03 16:57
14F:→ zeat:所以我才直觉的使用thread, 若改成SwingUtilities也可以做到 04/03 16:58
15F:→ zeat:吗? 谢谢, thanks a lot. 04/03 16:59
16F:推 zeat:我指的同步作其他事是类似可以同时输入JTextField/Area等. 04/03 17:10
17F:推 undeadj:SwingUtilities也是Thread 04/03 17:35
18F:→ undeadj:SwingUtilities.invokeLater 04/03 17:36
19F:推 sbrhsieh:不必担心 JFileChooser 秀出 dialog 会 block UI-thread 04/03 19:36
20F:→ sbrhsieh:否则,连 JFileChooser 自己的 UI 也无法使用了,不是吗 04/03 19:37