Tag: swingworker

Java套接字swingWorker正在运行但没有收到或传输消息

几天前,我试图创建一个服务器 – 客户端或客户端服务器作为实验来了解使用线程的套接字,但后来有人告诉我应该使用swingWorker。 我做了一些研究如何使用并在实践中实现它但它仍然无效。 swingWorker线程看起来不像它正在运行,即使我得到一个连接并使用.excute()。 如果你们可以帮助发现我做错了哪个会很棒。 SwingWorker类位于startSever()和startClient()方法中。 private void startServer() { SwingWorker runningServer = new SwingWorker(){ protected Void doInBackground() { try { listeningSocket = new ServerSocket(port); System.out.println(“waiting for connection”); connection = listeningSocket.accept(); connected = true; System.out.println(“Connected”); String incomeMessage =null; while(connected){ inStream = connection.getInputStream(); inDataStream = new DataInputStream(inStream); if (myMessage !=null){ outStream = connection.getOutputStream(); outDataStream = […]

调用mouseClicked()后JComponents消失

我正在用Swing编写Java GUI程序。 界面如下所示: 当用户点击右侧的其中一张图片时,我希望它的小预览显示在左上角的橙色区域中。 我通过SwingWorker线程从计算机上的目录中提取所有图像文件。 在SwingWorker的done()方法中 ,我向每个对象添加一个mouseClicked侦听器(来自我创建的类的TaggableImage对象。它具有BufferedImage并扩展JComponent,覆盖paintComponent()方法)。 在mouseClicked监听器中,我调用橙色面板的add()方法并将其传递给TaggableImage。 我的问题: 当我点击其中一个图像时,它不会被添加到橙色面板,它会从右侧的面板中消失。 如果我单击所有图像,我将留下一个空白的右侧面板。 为什么会这样? 这是我的整个SwingWorker线程: SwingWorker<ArrayList, Void> loadImagesAsyncWorker = new SwingWorker<ArrayList, Void>() { ArrayList img_list = new ArrayList(); @Override protected ArrayList doInBackground() throws Exception { File currentDirectory = new File(“.”); getFileInDirectory(currentDirectory); return null; } // recursively get all files in this directory and child directories private void […]

SwingWorker在另一个SwingWorker的done方法中

首先,我需要通知您,我正在努力学习如何用Java编写代码。 它有点困难,但是,我相信我拥有它。 我过去曾就SwingWorkers等提交了一些问题。 其中每一个我都认为我拥有它,但后来发现我还在学习。 希望这一次,不是那个时代之一。 话虽如此,请告诉我您认为不符合标准的任何内容,或者可能导致将来出现问题。 现在提出问题! 我构建了一个JFrame,在它允许用户进入另一个页面,按下按钮或其他任何内容之前加载了一些东西。 加载数据后,它将解锁JFrame以允许用户与数据交互。 问题是,(这不是一个真正的问题,只是一个澄清)我需要执行另一个任务,而用户可以这样的方式与JFrame交互它不会打扰他们,但是,将更新基于的JFrame它找到的结果。 一个例子可能是版本检查。 根据版本是否过期,通知用户。 示例Sudo代码 protected void startJFrame() { JFrame myFrame = new JFrame();//Starts with disable/invisible components. Preventing the user from doing to much before allowed. SwingWorker loadingWorker = new SwingWorker() { @Override protected Void doInBackground() throws Exception { publish(new Progress(0,”Loading This”)); // Set Percent loadingTasks.loadThis(); // […]

防止在后台任务期间锁定Swing GUI

我有一个swing应用程序,它存储一个对象列表。 当用户点击按钮时 我想对列表中的每个对象执行两个操作,然后在完成后,将结果绘制在JPanel中。 我一直在尝试使用SwingWorker,Callable和Runnable进行处理,但无论我做什么,在处理列表时(可能需要几分钟,因为它是IO绑定的),GUI被锁定。 我有一种感觉,这可能是我调用线程或其他东西的方式,还是可能与图形函数有关? 这不是线程,因为它非常快。 我必须按顺序完成两个处理阶段,那么确保第二个阶段在第一个阶段等待的最佳方法是什么? 我已经使用了join(),然后 while(x.isAlive()) { Thread.sleep(1000); } 试图确保这一点,但我担心这也可能是我的问题的原因。 我一直在寻找一些指针,但由于我找不到任何东西,我确信我在这里做了些蠢事。

GUI以30 fps运行?

在测试一些使用Swingworker的实时仿真代码时,我注意到我的GUI似乎总是以30 fps运行,不多也不少。 每次用户与应用程序交互时(如鼠标移动)或调用Swingworker的process()方法时,我都会更新GUI。 Swingworker现在没有做任何事情,它只是从GUI抓取鼠标位置并通过publish()和process()方法将其作为克隆发回(我只是这样做,看看我能做什么,能做什么在线程之间进行通信时会这样做,因为multithreading对我来说仍然是一个新手。 我在任何地方都没有定时器,Swingworker的process()方法在GUI上调用repaint(),所以我想知道是什么原因导致GUI以30 fps更新? 是否可能默认情况下GUI中的vsync处于活动状态,或者它是Swingworker中process()方法的某些行为? 最后:有没有办法获得更高的帧速率? 这是一个表现出这种行为的sscce: public class SimGameTest implements Runnable { public static void main(String[] args) { SwingUtilities.invokeLater(new SimGameTest()); } @Override public void run() { MainWindow mainWindow = new MainWindow(new Game()); mainWindow.setLocationRelativeTo(null); mainWindow.setVisible(true); } } public class MainWindow extends JFrame { private Game game; private GamePanel gamePanel; public MainWindow(Game game) { […]

SwingWorker没有响应

我想做什么? 单击Start JButton , SwingWorker将执行。 在doInBackground()方法中,我将arrNames每个索引传递给publish()方法,以便它可以显示在JTextArea 。 发生了什么 ? 如果我不保持行System.out.format(“Counter : %d%n”, counter); 作为注释 ,在我的SwingWorker doInBackground()方法中,然后SwingWorker 按预期工作 。 虽然如果我发表评论 ,那么SwingWorker 停止响应 。 难道我做错了什么 ? Java版本: java version “1.7.0_25” Java(TM) SE Runtime Environment (build 1.7.0_25-b16) Java HotSpot(TM) Client VM (build 23.25-b01, mixed mode, sharing) 这是我正在使用的代码: import java.awt.*; import java.awt.event.*; import javax.swing.*; public class SwingWorkerExample1 { private […]

如何在Java Swing应用程序中添加简单的延迟?

我想知道如何在Java中的Swing应用程序中添加时间延迟,我使用了Thread.sleep(time) ,并且我也使用了SwingWorker但它不起作用。 这是我的代码的一部分: switch (state) { case ‘A’: if (charAux == ‘A’) { state = ‘B’; //Here’s where I’d like to add a time delay jLabel13.setForeground(Color.red); break; } else { //Here’s where I’d like to add a time delay jLabel12.setForeground(Color.red); break; } } 我希望你在使用SwingWorker时可以帮助我或解决我的疑虑。

JButton ActionListener – 仅在单击JButton之后才更新GUI

我的JButton ActionListener有问题。 我有一个在另一个类中定义的doTheCleaning()方法,在调用时会对我的GUI进行一系列更改。 public void doTheCleaning(){ //change image icon //had thread.sleep here //insert to text area //had thread.sleep here //etc } 然后在另一个类中,我实例化了包含我的doTheCleaning()方法的类,并为我的jbutton编写了带有actionperformed()方法的ActionListener,如下所示: public void actionPerformed(ActionEvent e){ //some code //newClass.doTheCleaning(); } 我知道如何像addActionListener()和其他东西那样做其余的事情,所以不需要对此提出质疑。 我担心的是,调用doTheCleaning()方法时执行的GUI中的所有更改仅在单击按钮后才会应用。 发生这种情况时,我的标签和textarea中发生的更改之间的连续性未显示。 如果我直接在我的测试器类中调用它,但在actionperformed方法中调用它只显示我的GUI的最终状态,代码工作正常。 我需要先显示哪个元素已更改,然后是下一个元素,依此类推。 当我需要在单击JButton时才需要进行这些更改时,我怎么能实现它? **我在java中用GUI做的不太好。 如果没有我给我的代码,你们明白了我的观点。 但如果有必要,我可以。 谢谢。

使用大量行填充JTable

我想在运行时期间用很多行填充JTable(比方说10000)。 但我所有的尝试都非常糟糕且效率低下。 起点是addData方法,它获取表示行的对象列表。 我试图通过SwingWorker填充表格,但这仅适用于我的小数据。 另一种尝试是直接设置数据而不使用任何类型的线程,但这也非常慢,至少UI不像SwingWorker那样被阻止。 那你怎么做这个一般? 表应该逐行或逐行填充,但不能全部填充,垂直滚动条应同时滚动。 我的TableModel: public class MyTableModel extends AbstractTableModel { /** * */ private static final long serialVersionUID = 1L; String[] columnNames; public Map data = new LinkedHashMap(); public MyTableModel(String[] header) { columnNames = header; } public String getColumnName(int col) { return columnNames[col].toString(); } @Override public int getColumnCount() { return columnNames.length; […]