小编Zoy*_*oyd的帖子

java swing清除事件队列

是否可以以标准方式执行此操作?

这是场景.

  1. 开始在EDT中做一些昂贵的事情(EDT被阻止,直到昂贵的操作结束).

  2. 当EDT被阻止时,用户继续单击/拖动鼠标按钮.所有鼠标操作都记录在某处.

  3. 当EDT是免费的(用昂贵的东西完成)时,它开始处理鼠标事件.

我在步骤3中想要的是丢弃堆积的鼠标事件.在EDT免费之后,任何新的鼠标事件都应该以通常的方式处理.

关于如何实现这一点的任何想法.

PS:我不可能阻止EDT被阻止(我不控制程序中某些模块的行为).

编辑:如果我可以安全地调用"SunToolkit.flushPendingEvents()",那么在开始EDT中的昂贵操作之前,我总是可以放一个玻璃板.在昂贵的操作结束后,在EDT线程上,冲洗所有事件 - 他们将进入一个不做任何事情的玻璃窗格.然后让EDT正常工作.

EDIT2:我添加了一个SSCCE来演示这个问题.


public class BusyCursorTest2 extends javax.swing.JFrame {

    public BusyCursorTest2() {

        javax.swing.JButton wait = new javax.swing.JButton("Wait 3 seconds");
        getContentPane().setLayout(new java.awt.GridLayout(2, 1, 0, 0));
        getContentPane().add(wait);
        getContentPane().add(new javax.swing.JToggleButton("Click me"));
        setTitle("Busy Cursor");
        setSize(300, 200);
        setDefaultCloseOperation(javax.swing.JFrame.DISPOSE_ON_CLOSE);
        setVisible(true);

        wait.addActionListener(new java.awt.event.ActionListener() {

            public void actionPerformed(java.awt.event.ActionEvent event) {

                final java.util.Timer timer = switchToBusyCursor(BusyCursorTest2.this);

                try {
                    //do something expensive in EDT
                    try {
                        Thread.sleep(3000);
                    } catch (InterruptedException e) {
                        //do nothing
                    }
                } finally {
                    switchToNormalCursor(BusyCursorTest2.this, timer);
                } …

java swing eventqueue event-dispatch-thread

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

在运行时创建swing组件

我创建了应用程序,它的表现非常符合预期.只要数据库查询正在运行,gui就会保持响应.使用SwingUtilities.invokeLater()创建自定义面板时,gui会冻结很短的时间.

当我使用SwingUtilities.invokeAndWait()时,它在高端游戏PC上运行非常流畅.(可能不是代码最好的机器...)但是在相对较慢的机器(双核,2GB RAM)上,gui"滞后"

我创建了一个非常小的程序版本来重现行为.测试时增加TEST_NUMBER_OF_PANELS的值.

它将它设置为一个非常大的值,以重现我当前的电脑上的行为,没有任何花哨的外观和感觉和其他组件.但我不想这样张贴.所以我减少到100

package test;

import java.awt.BorderLayout;
import java.awt.CardLayout;
import java.awt.Color;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Vector;

import javax.swing.BorderFactory;
import javax.swing.BoxLayout;
import javax.swing.GroupLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTabbedPane;
import javax.swing.JTable;
import javax.swing.SwingConstants;
import javax.swing.SwingUtilities;
import javax.swing.SwingWorker;
import javax.swing.UIManager;
import javax.swing.event.TableModelEvent;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableCellRenderer;

//import org.pushingpixels.substance.api.SubstanceLookAndFeel;
//import org.pushingpixels.substance.api.skin.BusinessBlackSteelSkin;
//import org.pushingpixels.substance.api.skin.SubstanceBusinessBlackSteelLookAndFeel;

public class Test extends JFrame {
    private static final int TEST_NUMBER_OF_PANELS = 100; …
Run Code Online (Sandbox Code Playgroud)

java swing swingworker invokelater event-dispatch-thread

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

使用 Gin:如何将原始 JSON 负载传递到重定向 POST

我是 Go 和 Gin 的新手,所以请原谅我的无知。

我已经使用 Gin 设置了一个支持 POST 请求的服务器。我希望用户发布他们的请求,其中包括将请求重定向到另一个 URL 所需的 JSON 负载。作为重定向的一部分,我需要传递原始 JSON 有效负载。例如,如果用户发出此 CURL 请求:

curl -H "Content-Type: application/json" -d '{ "name": "NewTest Network", "organizationId": 534238, "type": "wireless"}' -X POST " http://localhost: 8080/网络

我的 Gin 代码是这样做的:

r.POST("/network", func(c *gin.Context) {
    c.Redirect(http.StatusMovedPermanently, networks_url)
})
Run Code Online (Sandbox Code Playgroud)

其中:networks_url 是重定向的 URL。我需要一种将原始 JSON 有效负载传递到重定向 URL 的方法。

您能提供的任何帮助将不胜感激。

go go-gin

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

在Visual Studio代码中调试Go测试

在我的Windows机器上,我安装了Visual Studio代码.要手动运行测试,我将进入项目文件夹并输入

go test main_test.go
Run Code Online (Sandbox Code Playgroud)

它完美地运作.

在此输入图像描述

但我有一种情况需要调试我的测试以了解正在发生的事情.

为此,我打开launch.json并添加配置

  {
        "name": "Tests",
        "type": "go",
        "request": "launch",
        "mode": "test",
        "remotePath": "",
        "port": 2346,
        "host": "127.0.0.1",
        "program": "${workspaceRoot}",
        "env": {},
        "args": [
           "main_test.go"
            ],
        "showLog": true
    }
Run Code Online (Sandbox Code Playgroud)

按完F5后,我有

2017/03/29 13:28:11 server.go:73: Using API v1
2017/03/29 13:28:11 debugger.go:68: launching process with args: [./debug.test main_test.go main_go]
not an executable file
Process exiting with code: 1
Run Code Online (Sandbox Code Playgroud)

任何想法为什么会出现这个错误以及它正在寻找什么可执行文件?

unit-testing go visual-studio-code

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

Java Swing EDT和并发

我只是想知道是否仍然需要确保invokeLater()Runnable的同步性.

我遇到了死锁,需要在保持并发性的同时克服它.

这是一个好代码的例子吗?:

private String text;

private void updateText()
{
    SwingUtilities.invokeLater(new Runnable()
    {
        public void run()
        {
            synchronized(FrameImpl.this)
            {
                someLabel.setText(text);
            }
        }
    });
}
Run Code Online (Sandbox Code Playgroud)

对于相当糟糕的示例感到抱歉,但我们必须假设它text被不同的线程修改,无法注入,并且依赖于正确的值.

这是正确的解决方案,还是通过将同步代码发送到未知的上下文中而无意中造成死锁问题?

谢谢.

java concurrency swing invokelater event-dispatch-thread

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

在golang中使用全局变量

我有一个全局变量,我试图在两个不同的函数中使用,并且无法弄清楚为什么以下代码不起作用...

package main

import (
    "github.com/ant0ine/go-json-rest/rest"
    "log"
    "net"
    "net/http"
)

type Message struct {
    Body string
}

var api rest.Api

func hostLookup(w rest.ResponseWriter, req *rest.Request) {
    ip, err := net.LookupIP(req.PathParam("host"))
    if err != nil {
        rest.Error(w, err.Error(), http.StatusInternalServerError)
        return
    }
    w.WriteJson(&ip)
}

func foo() {
    api := rest.NewApi()
    api.Use(rest.DefaultDevStack...)
    router, err := rest.MakeRouter(
        &rest.Route{"GET", "/lookup/#host", hostLookup},
    )
    if err != nil {
        log.Fatal(err)
    }
    api.SetApp(router)
}

func bar() {
    log.Fatal(http.ListenAndServe(":8080", api.MakeHandler()))
}

func main() {
    foo()

    bar()

}
Run Code Online (Sandbox Code Playgroud)

上面的代码不起作用...... HTTP服务器不会将请求路由到hostLookup函数. …

rest go

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

更改 Gin 中 JSON 数据的默认标头

我注意到使用 Gin 返回这样的响应:

c.JSON(http.StatusOK, jsonData)
Run Code Online (Sandbox Code Playgroud)

自动创建以下标头:

application/json; charset=utf-8
Run Code Online (Sandbox Code Playgroud)

是否可以以某种方式修改标头以返回

application/json
Run Code Online (Sandbox Code Playgroud)

我宁愿采用这种方法而不是在;

go go-gin

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

迭代所有 PostForm 值 Gin Gonic

有没有一种简单的方法可以使用 Gin Gonic 列出/迭代所有帖子值?(去)

我努力了:

c.Request.ParseForm()
for key, value := range c.Request.PostForm {
    log.Printf("POST %v = %v",key,value)
}
Run Code Online (Sandbox Code Playgroud)

但这没有显示任何值,但是当我直接从上下文测试值时:

log.Printf("POST email = %v", c.PostForm("email")
Run Code Online (Sandbox Code Playgroud)

它输出很好。

我想做的是将所有发布值映射到 gin.H{} 上下文中,以便在失败时我可以将发布的值传递回 .HTML 模板上下文并预先填充它们(以及我的错误消息) 。我发现的最好方法是将每个 POST 值手动连接到 gin.H{} 映射,但对于大型表单来说,这些似乎很冗长且不理想。

go go-gin

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

通道变量初始化后创建缓冲通道

我可以像这样初始化一个缓冲字符串通道

queue := make(chan string, 10)
Run Code Online (Sandbox Code Playgroud)

但是如何在 Go 的结构体中初始化缓冲通道呢?基本上我想将内存分配给缓冲字符串通道。但最初在结构中我只是定义它,在结构初始化中,我想为其分配内存

type message struct {

  queue *chan string
// or will it be 
//queue []chan string

}

func (this *message) init() {

  queue = make(chan string,10)

  this.queue = &queue

}
Run Code Online (Sandbox Code Playgroud)

memory-management channel go

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

生产中的 vue-router(与 Go 一起使用)

我想完全分离客户端和服务器,所以我创建了一个带有vue init webpack my-project. 在这个项目中,我将 vue-router 用于我的所有路由(这包括特殊路径,例如/user/SOMEID..

这是我的 routes.js 文件:

import App from './App.vue'

export const routes = [
  {
    path: '/',
    component: App.components.home
  },
  {
    path: '/user/:id',
    component: App.components.userid
  },
  {
    path: '*',
    component: App.components.notFound
  }
]
Run Code Online (Sandbox Code Playgroud)

当我使用npm run dev一切完美运行应用程序时。我现在准备部署到云中,所以我运行了npm run build. 由于我需要使用 HTTP 服务器,因此我决定也使用 Go 来实现……这是我的 Go 文件:

package main

import (
    "fmt"
    "github.com/go-chi/chi"
    "github.com/me/myproject/server/handler"
    "net/http"
    "strings"
)

func main() {
    r := chi.NewRouter()

    distDir := "/home/me/code/go/src/github.com/me/myproject/client/dist/static"
    FileServer(r, "/static", http.Dir(distDir)) …
Run Code Online (Sandbox Code Playgroud)

go vue.js vue-router vuejs2 go-chi

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