当达到条件java testng时完成测试用例方法

当达到条件java testng时完成测试用例方法,java,user-interface,testng,Java,User Interface,Testng,我有一个测试方法,它启动GUI窗口,然后启动一个无休止的循环。我想在GUI关闭时完成测试方法。你知道我怎样才能到达吗?我尝试设置一个boolean变量,当按下quit按钮时,我将其更改为false,这样循环应该是finish,但当我查看日志时,测试状态是start boolean testRunning = true; JButton buttonQuit; @Test public void start() { MainFrame.getInstance().setVisible(t

我有一个测试方法,它启动GUI窗口,然后启动一个无休止的循环。我想在GUI关闭时完成测试方法。你知道我怎样才能到达吗?我尝试设置一个
boolean
变量,当按下quit按钮时,我将其更改为false,这样循环应该是finish,但当我查看日志时,测试状态是start

boolean testRunning = true;
JButton buttonQuit;

@Test
public void start() {
    MainFrame.getInstance().setVisible(true);
    if (showHelpDialog) {
        HelpDialog.getInstance().setVisible(true);
    }
    while(testRunning) {

    }
}

当我按下退出按钮时,testRunning变量被设置为false。

我想你的问题是,你通过执行循环用UI阻塞了线程

我用JFrame做了一个小例子。此框架有一个与框架一样大的按钮。在一个线程中,在按下按钮之前,循环一直在工作:

import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;

public class Test {

    //to setThe state of the loop
    public static boolean continueLoop = true;

    public static void main(String[] args) {

        //Create a Frame
        JFrame frame = new JFrame();
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setLocationRelativeTo(null);
        Dimension d = new Dimension(400, 400);
        frame.setSize(d);

        //Add a button to close the programm or end the loop
        JButton b = new JButton("Close");
        b.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e) {
                continueLoop = false;
                //Enable this if you want to close the programm
                //System.exit(0);
            }
        });

        // Start a Thread with your endless loop in it
        Thread t = new Thread(new Runnable() {

            @Override
            public void run() {
                int i = 1;
                while(continueLoop)
                {
                    try {
                        Thread.sleep(500);
                        System.out.println("Try: " + i);
                        i++;
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }

            }
        });
        t.start();

        // Add a button and set de Frame visible
        frame.add(b);       
        frame.setVisible(true);

    }

}
希望有帮助


这是我能想到的最快的例子。请注意,有更好的方法向UI添加状态控制循环。例如,我在我的示例中使用了静态变量—您不应该在应用程序中这样做—除非它确实是必要的。

我认为您的问题在于,您通过执行循环用UI阻塞了线程

我用JFrame做了一个小例子。此框架有一个与框架一样大的按钮。在一个线程中,在按下按钮之前,循环一直在工作:

import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;

public class Test {

    //to setThe state of the loop
    public static boolean continueLoop = true;

    public static void main(String[] args) {

        //Create a Frame
        JFrame frame = new JFrame();
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setLocationRelativeTo(null);
        Dimension d = new Dimension(400, 400);
        frame.setSize(d);

        //Add a button to close the programm or end the loop
        JButton b = new JButton("Close");
        b.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e) {
                continueLoop = false;
                //Enable this if you want to close the programm
                //System.exit(0);
            }
        });

        // Start a Thread with your endless loop in it
        Thread t = new Thread(new Runnable() {

            @Override
            public void run() {
                int i = 1;
                while(continueLoop)
                {
                    try {
                        Thread.sleep(500);
                        System.out.println("Try: " + i);
                        i++;
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }

            }
        });
        t.start();

        // Add a button and set de Frame visible
        frame.add(b);       
        frame.setVisible(true);

    }

}
希望有帮助


这是我能想到的最快的例子。请注意,有更好的方法向UI添加状态控制循环。例如,我在我的示例中使用了静态变量-您不应该在应用程序中这样做-除非确实有必要。

您可以向我们展示您已经拥有的代码吗?您可以向我们展示您已经拥有的代码吗?@user3552976请随时询问是否有不清楚的地方。谢谢,我稍后将尝试此解决方案,现在我还有其他任务要做。当我按下按钮时,变量的值变为false,但当我在循环设置为true时打印它时,我不知道它是否工作why@user3552976您是否在独立项目中尝试过我的代码,或将其应用于您的代码?好的,我解决了我的问题。我更改了您的代码停止条件,这取决于主窗口gui的可见性。如果可见性设置为false,则循环中断,应用程序停止执行。谢谢你help@user3552976请随时询问是否有不清楚的地方。谢谢,稍后我将尝试此解决方案,现在我还有其他任务要做。当我按下按钮时,变量的值变为false,但当我在循环设置为true时打印它时,我不知道它是否工作why@user3552976您是否在独立项目中尝试过我的代码,或将其应用于您的代码?好的,我解决了我的问题。我更改了您的代码停止条件,这取决于主窗口gui的可见性。如果可见性设置为false,则循环中断,应用程序停止执行。谢谢你的帮助