相关疑难解决方法(0)

在EDT之外安全使用Component.repaint()?

我找不到任何官方文档说Component.repaint从除了事件调度线程(EDT)之外的另一个线程调用是安全的.

是这样吗?我在哪里可以找到一些文档/代码?

java swing awt

24
推荐指数
2
解决办法
5009
查看次数

事件派发线程如何工作?

stackoverflow上的人的帮助下,我能够获得以下简单GUI倒计时的工作代码(它只显示一个倒数秒的窗口).我对这段代码的主要问题是这些invokeLater东西.

据我所知invokeLater,它向事件调度线程(EDT)发送任务,然后EDT在"可以"(无论这意味着什么)时执行该任务.是对的吗?

根据我的理解,代码的工作原理如下:

  1. main我们用于invokeLater显示窗口(showGUI方法)的方法中.换句话说,显示窗口的代码将在EDT中执行.

  2. 在该main方法中,我们也启动counter并且计数器(通过构造)在另一个线程中执行(因此它不在事件调度线程中).对?

  3. counter在一个单独的线程中执行,并定期调用updateGUI.updateGUI应该更新GUI.GUI正在EDT中运行.所以,updateGUI也应该在EDT中执行.这就是为什么该代码的原因updateGUI被封闭在invokeLater.是对的吗?

我不清楚的是为什么我们打电话counter给EDT.无论如何,它不是在EDT中执行的.它立即启动,一个新线程并在counter那里执行.那么,为什么我们不能counterinvokeLater块之后调用main方法呢?

import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.SwingUtilities;

public class CountdownNew {

    static JLabel label;

    // Method which defines the appearance of the window.   
    public static void showGUI() {
        JFrame frame = new JFrame("Simple Countdown");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        label …
Run Code Online (Sandbox Code Playgroud)

java events user-interface multithreading invoke

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

在求解X时从JTextArea中检索double

好的,我是java的新手.我正在制作一个解决一步方程式的程序.虽然我在运行它时遇到了一些困难.这是我的主文件的代码,Main.java:

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

public class Main extends JFrame implements ActionListener {
    private static final long serialVersionUID = 1L;
    Solve solve = new Solve();
    JButton add = new JButton("Add");
    JButton sub = new JButton("Subtract");
    JButton mult = new JButton("Multiply");
    JButton div = new JButton("Divide");
    JButton solv = new JButton("Solve!");
    JTextArea one = new JTextArea();
    JLabel two = new JLabel(" = ");
    JLabel three = new JLabel("X");
    JLabel four = new JLabel();
    JTextArea five = new …
Run Code Online (Sandbox Code Playgroud)

java swing runtime-error jtextarea

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