.addActionListener(new ActionListener(){
public void actionPerformed (ActionEvent e){
try{
ta.append("Searching Initiated at: "+datetime()+"\n");
gui.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
task.execute();
javax.swing.SwingUtilities.invokeLater(new Runnable() {
public void run() {
gui.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
}
});
//Enable the next stage in the YD process and disable the previously executed functions
clusAn.setEnabled(true);
open.setEnabled(false);
statCl.setEnabled(false);
}catch (Exception IOE){
}
}
});
Run Code Online (Sandbox Code Playgroud)
嗨,我设计的这个应用程序的最后阶段有点痛苦.
基本上,当用户点击按钮时,我会喜欢它,所以光标变成'等待'版本,然后一旦后台进程(task.execute)完成,光标就会恢复正常.
task.execute不在同一个类中,因此我不能直接调用"gui.setCursor",因为它不能将GUI识别为变量.
不知道该怎么做,所以任何建议都会很棒
感谢:D
给出以下代码:
public static void main(String[] args)
{
SwingUtilities.invokeLater(new Runnable()
{
public void run()
{
ClientGUI gui = new ClientGUI();
gui.start();
}
});
}
Run Code Online (Sandbox Code Playgroud)
一切正常,我得到一个很好的GUI窗口.好.现在,让我们在gui.start()之后添加一个无限循环:
public static void main(String[] args)
{
SwingUtilities.invokeLater(new Runnable()
{
public void run()
{
ClientGUI gui = new ClientGUI();
gui.start();
while (true) {
}
}
});
}
Run Code Online (Sandbox Code Playgroud)
并且输出是一个空白窗口,不响应窗口退出.有人能解释一下这里到底有什么好事吗?
我有这段代码
import javax.swing.SwingUtilities;
public class Client1 {
public static void main( String[] args ) {
SwingUtilities.invokeLater( new Runnable() {
public void run() {
//new MyWindow( "Bayog" );
new MyWindowV2( "Bayog" );
}
} );
}
}
Run Code Online (Sandbox Code Playgroud)
如果我不使用SwingUtilities有什么区别?
我有一个类,它装饰 Swing 中的 JTextComponent。它包含的方法可以从任何线程调用,因此我必须确保与 JTextComponent 一起使用的代码将由 AWT 线程执行。
第二个要求是,调用整个方法的线程将“等待”,直到 AWT 线程完成任务。
public String getSelectedText() {
Callable c = new Callable() {
@Override
public Object call() throws Exception {
if (area.getSelectedText() == null) {
return "";
}
return area.getSelectedText();
}
};
if (Thread.currentThread().getName().contains("AWT")) {
return (String)c.call();
}
else {
FutureTask task = new FutureTask(c);
SwingUtilities.invokeLater(task);
while (!task.isDone()) {
//waiting
}
try {
return (String)task.get();
}
catch (InterruptedException | ExecutionException ex) {
return "";
}
}
}
Run Code Online (Sandbox Code Playgroud)
该代码对我来说运行良好,但仍然存在一个问题。如果有人想要使用我的类,重命名 AWT 线程,那么它就会陷入死锁。
有什么方法可以明确识别 AWT …
所以我的JProgressBar设置不按我想要的方式工作.因此,每当我运行程序时,它立即从0变为100.我尝试使用一个ProgressMonitor任务,并尝试了一个SwingWorker但我没有尝试过的工作.
这是我的计划:
int max = 10;
for (int i = 0; i <= max; i++) {
final int progress = (int)Math.round(
100.0 * ((double)i / (double)max)
);
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
try {
Thread.sleep(1000);
} catch (InterruptedException ex) {
Logger.getLogger(BandListGenerator.class.getName()).log(Level.SEVERE, null, ex);
}
jProgressBar2.setValue(progress);
}
});
}
Run Code Online (Sandbox Code Playgroud)
@MadProgrammer这是我尝试制作一个摇摆工作者并将每个名字写入文档并更新进度条.程序达到86%左右并停止,从不创建完成的文档.该程序创建一个空白文档.以下是两种方法,首先是我制作的SwingWorker对象:
public class GreenWorker extends SwingWorker<Object, Object> {
@Override
protected Object doInBackground() throws Exception {
int max = greenList.size();
XWPFParagraph tmpParagraph;
XWPFRun tmpRun; …Run Code Online (Sandbox Code Playgroud)