标签: event-dispatch-thread

Java GUI,JFrame和Dialog

我读到你不应该.show()在主线程上构建框架以避免死锁,这是一个真正的问题.这应该总是避免吗?此外,一旦您显示任何类型的对话框,例如ProgressMonitorInputStream,即使它已关闭并完成,您仍然必须调用System.exit()以终止应用程序吗?JDialog怎么样?

java user-interface swing awt event-dispatch-thread

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

标签的文本在Java中没有变化

我为我的项目创建了一个UI,它涉及JLabel(javax.swing),每次完成任务时都需要更新(Label标签)文本.

我使用label.setText来更改/更新里面的文本(如下所示.)但是,大多数情况下,标签不会更改文本.我试图使用label.UpdateUI()希望它能解决问题,但它没有.

taskLabel.setText(msg);
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

if (gatherSamplesValue)
{
      if (SourceACheckBox)
      {
           try 
           { 
                Thread setLabelText1 = new Thread(){
                    public void run(){
                        taskLabel.setText(msg);

                    taskLabel.validate();
                }
             };
             msg = "Task : Gathering URLs from Phish Tank. DateTime: " + Main.getCurrentDate();
             setLabelText1.start();
             SourceA.sourceAMain();
             msg="Done with the task : " + Main.getCurrentDate();
             Thread setLabelText2 = new Thread(){
                public void run(){
                    taskLabel.setText(msg);
                    taskLabel.validate();
                }
             };
             setLabelText2.start();
      } catch (Exception ex) {
            Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
      }
 }

 if (SourceBCheckBox)
 {
  .
  .
 }

 if (SourceCCheckBox)
 {
  . …
Run Code Online (Sandbox Code Playgroud)

java concurrency swing jlabel event-dispatch-thread

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

在迭代或循环内部更改JTextField的文本

假设我有一个JTextField"status",我正在运行这段代码:

status = new JTextField(50);
add(status);

for (int i=0; i<10000; i++) {
     status.setText("bla bla - "+ i);
     System.out.println("bla bla - "+ i);
}
Run Code Online (Sandbox Code Playgroud)

我的问题是,现在当循环运行时,JTextField的文本中没有任何事情发生,并且只有当循环结束时,标签是"bla bla - 10000".

我想制作类似于状态栏的内容但不能更新此状态栏"在线".我也尝试在一个线程中进行更新,但结果却相同.

有人可以在迭代或循环时显示我如何在GUI中显示文本吗?

java swing jtextfield event-dispatch-thread

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

在java中使用MultiThreading,我希望UI和代码并行执行

我有一个JFrame进度条和我的代码,它应该在后台运行它显示进度条中的进度.

我在Progressbar类中实现了runnable并启动了线程.但进度条框架没有显示完整..并且它被卡住并且在我的代码完全执行后显示已满,即在主线程关闭后.

我知道这是一个基本错误.

public class ProgressScriptUI extends JFrame implements Runnable{

    @Override
    public void run() {
        // TODO Auto-generated method stub
        setTitle("Progressing to Generate DDL Scripts");
        setBounds(400, 250, 850, 400);
        getContentPane().setLayout(null);
        JProgressBar progressBar= new JProgressBar(0,100);
        progressBar.setBounds(200, 100, 500, 20);
        add(progressBar);
        setVisible(true);

        setVisible(true);
        setDefaultCloseOperation(EXIT_ON_CLOSE);
    }

}

//I am calling the below code in some other class
ProgressScriptUI progress = new ProgressScriptUI();


Thread uiThread = new Thread(progress);                                             
uiThread.start();
oracleValidateOLDorNEW.execute(); //Code that I need to call in back ground
Run Code Online (Sandbox Code Playgroud)

java swing multithreading jprogressbar event-dispatch-thread

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

无法在while循环中的java applet中的文本字段中设置文本

我想在一个java小程序中制作一个秒表.问题是..我有一个文本字段说"数字".我接受输入然后当我按下开始按钮时..流程转到下面提到的循环... //我使用NETBEANS!我需要在数字字段中的每1秒文本必须递减1之后...但这不会发生.代码工作正常..但是在时间完成后显示"0"..而不是在循环运行时.

private void startActionPerformed(java.awt.event.ActionEvent evt) 
{                                      
    int i = Integer.parseInt(number.getText());
    number.setText(Integer.toString(i));

    while(i!=0)
    {
        System.out.print(i);
        //number.setText(Integer.toString(i));
        number.setText("");
        try{Thread.sleep(900);}catch(Exception e){e.getMessage();System.out.println(e);}
        i--;
    }
}  
Run Code Online (Sandbox Code Playgroud)

java applet sleep awt event-dispatch-thread

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

SwingUtilities invokeLater的主要目的

我有这段代码

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有什么区别?

java swing invokelater event-dispatch-thread swingutilities

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

使用长时间运行的任务结果重复更新JLabel

我正在编写一个不断ping服务器的程序.我编写代码来检查一次并将ping放入a JLabel并将其放入一个名为的方法中setPing().

这是我的代码

private void formWindowOpened(java.awt.event.WindowEvent evt) {                                  
    setPing();
}           
Run Code Online (Sandbox Code Playgroud)

这工作但只做了一次,所以我做了:

private void formWindowOpened(java.awt.event.WindowEvent evt) {                                  
for(;;){
    setPing();
    }
}           
Run Code Online (Sandbox Code Playgroud)

但这甚至没有第一次起作用.

我没有把setPing方法,因为它太长了所以这里是:

public String setPing(){
Runtime runtime = Runtime.getRuntime(); 
try{
    Process process = runtime.exec("ping lol.garena.com");
InputStream is = process.getInputStream(); 
InputStreamReader isr = new InputStreamReader(is); 
BufferedReader br = new BufferedReader(isr); 
String line; 
while ((line = br.readLine()) != null) {
    int i = 0;
      i = line.indexOf("Average");
    if(i > 0){  
    String finalPing = "";
    line.toCharArray();
    try
    {
        finalPing = …
Run Code Online (Sandbox Code Playgroud)

java swing ping jlabel event-dispatch-thread

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

如何在java swing中以线程安全的方式初始化gui对象?

我正在阅读Thinking in Java,作者强调主要方法不应该调用swing方法.作为这种做法的一个例子,他提出了以下一段代码(可在他的网页上找到):

//: gui/SubmitSwingProgram.java
import javax.swing.*;
import java.util.concurrent.*;

public class SubmitSwingProgram extends JFrame {
  JLabel label;
  public SubmitSwingProgram() {
    super("Hello Swing");
    label = new JLabel("A Label");
    add(label);
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setSize(300, 100);
    setVisible(true);
  }
  static SubmitSwingProgram ssp;
  public static void main(String[] args) throws Exception {
    SwingUtilities.invokeLater(new Runnable() {
      public void run() { ssp = new SubmitSwingProgram(); }
    });
    TimeUnit.SECONDS.sleep(1);
    SwingUtilities.invokeLater(new Runnable() {
      public void run() {
        ssp.label.setText("Hey! This is Different!");
      }
    });
  }
} ///:~
Run Code Online (Sandbox Code Playgroud)

然后通过invokeLater方法创建并初始化gui对象,使其成为线程安全的.但是几页之后,作者提出了以下代码:

//: gui/Button2.java
// Responding to …
Run Code Online (Sandbox Code Playgroud)

java swing multithreading thread-safety event-dispatch-thread

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

更改文本框架颜色 - 应用程序.很冷

好的,所以我们的任务是创建一个猜测游戏,用户输入一个数字,文本前景应该变为红色,如果它太高,蓝色,如果它太低,或绿色,如果它是准确的.

我们的老师发布了代码,这很简单,我可以理解它.问题是,当我尝试重新格式化我需要的东西时,我得到了JFrame,我得到了我可以输入的文本字段,但是当我点击提交它就像冻结一样.我想它与动作监听器的编写方式有关,但我不确定.

任何帮助将是欣赏.

这是我的代码,编辑所以只显示特定部分"

 button.addActionListener(
        new ActionListener() 
        {
            @Override
            public void actionPerformed(ActionEvent arg0) 
            {


                userInput = keyboard.next();

                if(Integer.parseInt(userInput) > randomNumber)
                    {
                        tf.setForeground(Color.red);;
                    }
                    else if(Integer.parseInt(userInput) < randomNumber)
                    {
                        tf.setForeground(Color.blue);
                    }
                    else if(Integer.parseInt(userInput) == randomNumber)
                    {
                        tf.setForeground(Color.green);
                    }

                }
            }
           );
    }
Run Code Online (Sandbox Code Playgroud)

java swing jframe jtextfield event-dispatch-thread

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

循环中的并发与循环

我一直在阅读关于Swing中的Java Concurrency,并且无法找到适合我情况的答案.

目标:让我的swing应用程序同时运行while循环,直到程序/应用程序退出.

问题:程序冻结(正如我之前预期的那样)并且无法使用.

尝试 - 解决方案:我试图在另一个线程上启动while循环,启动它,仍然没有.

码:

package stakeme;

import java.io.IOException;

import javax.swing.SwingUtilities;

public class StakeMeServer {

    private static ServerSocket socket;

    public static Thread t;


    public static void main(String[] args) throws IOException {


        SwingUtilities.invokeLater(new Runnable() {

            @Override
            public void run() {
                new ConsoleGUI("Server", 800, 400, false);
            }

        });

        Thread t = new Thread(() -> {
            System.out.println("1");
            while (online) {
                System.out.println("2");
            }
        });
        t.setName("GameServer");
        t.start();
    }

}
Run Code Online (Sandbox Code Playgroud)



更新:通过使用SwingWorker类在后台执行我的while循环,我几乎可以做我需要做的事情.

码:

package stakeme;

import java.io.IOException;
import …
Run Code Online (Sandbox Code Playgroud)

java concurrency swing swingworker event-dispatch-thread

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