Tag: event dispatch thread

Swing:将光标更改为等待光标

另请参阅Java Swing GUI沙漏 。 但是,提供的答案似乎不起作用。 我有以下代码: private void loadFileMenuItemActionPerformed(java.awt.event.ActionEvent evt) { int returnVal = fileChoser.showOpenDialog(this); if (returnVal == JFileChooser.APPROVE_OPTION) { try { this.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR)); // do stuff } finally { this.setCursor(Cursor.getDefaultCursor()); } } } 当用户在菜单栏中选择相应条目时调用此方法。 但是光标永远不会改变。 请注意,加载文件需要一个文件,因此应该可以看到光标的变化。 我究竟做错了什么? 编辑: this是顶级JFrame。 编辑2: 将解决方案移至单独的答案

SwingUtilities.invokeLater采用Runnable并在EDT上运行它?

我对SwingUtilities.invokeLater的签名感到困惑。 它需要一个Runnable对象。 这个Runnable对象是否被移交给Event Dispatch Thread? 为什么我不能直接在EDT的run方法上调用createAndShowGUI (如果可能的话)? 我已经阅读过有关 EDT和invokeLater如何工作的文章,但我对传递的Runnable对象感到困惑。 SwingUtilities.invokeLater(new Runnable() { public void run() { createAndShowGUI(); } }); 如果我在电话下方再次呼叫SwingUtilities.invokeLater会发生什么? SwingUtilities.invokeLater(new Runnable() { public void run() { createAndShowGUI(); } }); SwingUtilities.invokeLater(new Runnable() { public void run() { doSomethingOnTopOfGUI(); } });

如何在java中的Event Dispatch Thread队列的开头插入一个事件?

我已经知道Event Dispatch线程是如何工作的。 如果事件调度线程中存在短事件和长事件,如下所示,则应用程序无法响应。 对于Swing中的响应性,Event Dispatch线程仅应用于短事件。 而应该在SwingWorkers上执行长事件。 想象一下,有很多短暂的事件。 事件应该在Event Dispatch线程中执行,并且您有一个特殊事件,您希望在Event Dispatch Thread队列中存在其他事件之前执行该事件。 但是,默认情况下,事件将排队到队列的末尾,甚至InvokeLater也会这样做。 那么,是否有任何解决方案将事件排入事件调度线程的开头?

如何在Swing中分析EDT?

我有一个应用程序,我正在Swing中构建。 它有一个可滚动和可缩放的图表组件,我可以平移和放大。整个过程是顺利的,除了有时UI将暂停约750毫秒,我不知道为什么。 这并不总是会发生 – 但有时在应用程序中会发生某些事情,并且每隔6-8秒就开始暂停一次。 很明显,EDT上有一些事件需要750毫秒才能运行,这不应该发生。 我如何具体地描述EDT? 我真正想要做的是每当事件在EDT上运行时,将事件所花费的总时间量输出到日志或System.out。 有没有办法做到这一点? 或者是否有一些工具可以为我做这个并给我一个在EDT上运行的所有内容的日志以及需要多长时间? 我想通过这个日志,查看花费很长时间的所有内容,并找到问题所在。

Java Sleep无法在循环中工作

我想在我的java程序中做的是,当我按下按钮时,它会按时间间隔在文本textfield中显示文本。 即按下按钮然后弹出一个jFrame ,并且有一个标签显示如下文字:第一秒:“1st”然后是1秒的时间滞后然后是第二件事:“第二件” 我是一个新手,我试图谷歌这个问题,但我找不到解决方案,即使3-4小时后我尝试了很多东西:睡觉,尝试抓住… 请将答案写得非常简单。 这是我的代码:在下面的代码中,当按下按钮时,jFrame会出现但是其中有一个白色屏幕,当总和结束时,它的屏幕变为灰色并显示答案…. private void jButton5ActionPerformed(java.awt.event.ActionEvent evt) { See.setVisible(true);//See is the JFrame t007.setVisible(true);//Label in See l2.setVisible(true);//TextField in See int ran, g, d, col, ran2; double y = 1000 * (Double.parseDouble(t2.getText())); int x = (int) y; d = 0; double c = Math.pow(10, Integer.parseInt(t1.getText())); col = Integer.parseInt(t3.getText()); for (g = 0; g (c […]

计算时的Java swing重绘:动画排序算法

http://www.youtube.com/watch?v=M0cNsmjK33E 我想使用Java Swing开发类似于上面链接的东西。 我有排序方法,并在重绘时完成,但是当我触发排序时,它不是显示条慢慢排序本身,而是在数组完全排序时冻结然后解冻。 我该如何解决? 编辑:抱歉忘了密码。 它是一个非常简单的gui。 另一个用于排序的类对整个数组进行排序 public class SortGUI { JFrame frame; int frameWidth = 1000, frameHeight = 1000; int panelWidth, panelHeight; DrawPanel panel; JPanel panel2; JScrollPane scroll; JViewport view; static int[] S = new int[50000]; public static void main(String[] args) throws InterruptedException { SortGUI app = new SortGUI(); initializeArray(); app.go(); } public […]

当命中JButton连接到服务器时,程序会冻结

我在java中使用TCP进行简单的1v1“私聊”。 目前,每当我使用JButtons时,我都会遇到问题。 这是我第一次尝试使用JButtons和ActionListeners,所以我不是100%肯定这里发生了什么。 我有两个单独的服务器和客户端项目。 要编译这些,它必须是两个单独的项目。 当我尝试按下按钮时出现问题A:启动服务器B:连接到服务器。 按钮冻结,就好像它处于推动状态一样。 在运行服务器并按下按钮时,要“取消”按钮,客户端必须尝试连接。 服务器向客户端发送MOTD,客户端应将其打印到文本窗口。 只有在服务器关闭后才打印出MOTD。 再次,不知道为什么 服务器代码: package net.valid4life.chat; import java.awt.Component; public class Chat implements ActionListener { private static final long serialVersionUID = 1L; private static JFrame mainFrame; private static JPanel contentPane; private static JTextArea chatWindow; private static JTextArea serverWindow; private static JTextField chatBox; private static JTextField portBox; private static […]

我应该在EDT中分配/创建swing元素吗?

我应该在EDT中创建摆动元素吗? 我在编辑非线程安全的图形元素时遇到了并发问题,但是我正在创建它们,它们还没有显示,如果它们很多或者它们需要一些时间来分配会冻结GUI,那么是吗? 这里是我使用EDT显示但不创建GUI结构的示例: public class Launcher { private final SwingWorker worker; private final JFrame frame; private final JLabel label; private final JProgressBar progressBar; public Launcher() { // init user interface frame = new JFrame(); JPanel panel = new JPanel(new BorderLayout()); label = new JLabel(“Launching…”, SwingConstants.CENTER); progressBar = new JProgressBar(0, 100); progressBar.setIndeterminate(true); panel.add(label, BorderLayout.CENTER); panel.add(progressBar, BorderLayout.PAGE_END); […]

Java Swing重/慢paintComponent – 任何建议?

我正在制作一个滚动的2D地图/平铺游戏。 每个图块(存储为图块[21] [11] – 每个图总共231个图块)最多可包含21个值(存储为int [3] [7])。 全屏时我一次看到大约8张地图。 平均而言,每个地图绘制大约需要0.03秒(使用System.nanoTime找到)。 问题是,只要屏幕上有多个地图,Swing事件轮询就会明显变慢。 这有什么解决方案吗? 我无法一次绘制地图以将其保存为图像,因为它具有涉及移动演员的透明度,因此它变化太频繁。 另外我不认为我可以在paintComponent中调用一个线程来绘制地图而不会出现故障,但我并不积极。

客户端 – 服务器Java GUI:读/写导致程序冻结

我正在用Java(包括GUI)做一个客户端/服务器程序。 我在客户端中有以下代码: public class SBListener implements ActionListener{ public void actionPerformed(ActionEvent e){ try{ outToServer.writeUTF(usn.getText().trim()); System.out.println(“sent username to server”); playerExists = inToClient.readBoolean(); System.out.println(“past getting player”); System.out.println(“player exists = ” + playerExists); }catch(IOException a){ System.err.println(a); } if(playerExists == false){ JButton submitInfo = new JButton(“submit info”); submitInfo.addActionListener(new SBNewInfoListener()); init.add(new JLabel(“”));//dummy element to get the right alignment init.add(new JLabel(“First Name:”)); […]