标签: invokeandwait

SwingWorker中的错误处理

我的问题是基于理论的问题,但它确实满足了我的特定需求.

当你的SwingWorker抛出a)你可以预料到并且b)需要从中恢复并继续的异常时,你会怎么做,但是你想通知用户这个错误已经发生了?如何获取预期的异常并通知用户而不违反"No Swing code from doInBackground()"规则?

考虑到这个问题,我已经开发了一个SSCCE,我想提出下面的问题.

SSCCE:

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.concurrent.ExecutionException;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JProgressBar;
import javax.swing.SwingUtilities;
import javax.swing.SwingWorker;

public class Test {

    public static void main(String args[]) {
        final JFrame frame = new JFrame();
        JButton go = new JButton("Go.");
        go.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                new Task(frame);
            }
        });
        frame.add(go);
        frame.pack();
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setLocationByPlatform(true);
        frame.setVisible(true);
    }

    static class Task extends SwingWorker<Void, Void> {
        JFrame …
Run Code Online (Sandbox Code Playgroud)

java swing swingworker event-dispatch-thread invokeandwait

5
推荐指数
1
解决办法
606
查看次数

Java Swing:主类等到JFrame关闭

我需要一些简单的java应用程序的帮助,它使用两个jframe来获取一些输入参数.这是我的代码草图:

//second jframe, called when the button OK of the first frame is clicked
public class NewParamJFrame extends JFrame{
  ...
}

//first jframe
public class StartingJFrame extends JFrame{
  private static  NewParamJFrame newPFrame = null;
  private JTextField gnFilePath;
  private JButton btnOK;

  public StartingJFrame(){
            //..
    initComponents();
  }

  private void initComponents(){
     btnOK.addActionListener(new ActionListener(){
      public void actionPerformed(ActionEvent e){
        try{
        EventQueue.invokeAndWait(new Runnable(){
           public void run() {
               try {
               newPFrame = new NewParamJFrame();
               newPFrame.setVisible(true);
               } catch (Exception e) {
               e.printStackTrace();
               }
           }
         });
        }
        catch(InvocationTargetException e2) …
Run Code Online (Sandbox Code Playgroud)

java swing input jframe invokeandwait

4
推荐指数
2
解决办法
2万
查看次数

等待调用invokeLater()

有没有更优雅的方式去做我在下面做的事情?也就是说,是否有比轮询和睡眠,轮询和睡眠更优雅的方式,等等,以便知道何时Runnable.run()通过调用方法invokeLater()

private int myMethod() {
    final WaitForEventQueue waitForQueue = new WaitForEventQueue();
    EventQueue.invokeLater(waitForQueue);
    while (!waitForQueue.done) {
        try {
            Thread.sleep(10);
        } catch (InterruptedException ignore) {
        }
    }

    return 0;
}

private class WaitForEventQueue implements Runnable {
    private boolean done;

    public void run() {
        // Let all Swing text stuff finish.
        done = true;
    }
}
Run Code Online (Sandbox Code Playgroud)

java sleep polling eventqueue invokeandwait

1
推荐指数
1
解决办法
1209
查看次数

如何在Swing应用程序中实现循环逻辑?

我的头衔有些神秘,但我无法想出一个明确的标题.

首先,两个代码片段建立一个参考点(希望我没有拼写错误):

输入 Scanner

'''
Scanner sc = new Scanner(System.in);
for (int i=0; i<10; ++ i)  {
  System.out.print("Please input a value:");
  String answer = sc.next();
  // do something with this string
}  
...
Run Code Online (Sandbox Code Playgroud)

输入JOptionPane:

...
for (int i=0; i<10; ++ i) {
   String answer = JOptionPane.showInputDialog("Please input a value");
   // do something with this string
{
Run Code Online (Sandbox Code Playgroud)

因此,在上面的示例中,我们要求用户输入固定次数的值.如何在Swing应用程序中实现相同类型的功能?

我可以创建一个JFramewith JPanel(作为其内容窗格)并添加JLabel(带有提示符)和JTextField此面板.我还可以为ActionListener文本字段创建哪个ActionPerformed方法来检索值并对其进行处理.字符串处理不是一个长期运行的任务,所以我不相信我需要一个单独的工作线程.

由于我们无法真正强迫用户做任何事情,我计划使用javax.swing.Timer …

java swing actionlistener invokeandwait

1
推荐指数
1
解决办法
93
查看次数