我开发了一个用于创建和提取存档的Java应用程序 - 比如WinRAR.您可以使用多线程同时创建多个归档.最近,我希望在每个创建时在新的JFrame中以JProgressBar的形式在存档创建期间添加信息状态.
但我的问题是在新的状态框架和创建存档的线程中生成信息.这就是我在存档线程中创建JFrame以更新当前进度条的原因.
但就像我可以在各种信息源和你的答案/评论中阅读它一样,它反对Java Swing和性能; 我无法在EDT的其他地方创建摆动对象.
但那么,我该如何解决我的问题呢?如何在存档的写入和状态JFrame(使用JProgressBar)之间建立通信?
编辑:
我实现了SwingWorker来管理我的应用程序中的GUI.现在已经完成了,我还有一个问题:
使用SwingWorker,如何使用状态框架按钮上的事件对后台任务执行操作?(示例:暂停压缩或停止压缩.)
java user-interface swing multithreading event-dispatch-thread
假设我拥有的方法有时在Event Dispatch Thread上调用,有时则不然.现在假设我希望在该方法中的一些代码调用除事件调度线程之外的线程.
有没有办法在此时在EDT以外的线程上运行某些代码?
我试过这个:
if (SwingUtilities.isEventDispatchThread()) {
new Runnable() {
@Override
public void run() {
myMethod();
}
}.run();
} else {
myMethod();
}
Run Code Online (Sandbox Code Playgroud)
但是即使我创建了一个新的Runnable,myMethod()也最终在EDT上运行.
有没有办法在此时在EDT以外的线程上运行myMethod()?
我正在使用Julien Schmidt的GoLang路由器,并尝试让它与Alice合作来连接中间件.我收到这个错误:
不能使用commonHandlers.ThenFunc(final)(类型http.Handler)作为路由器的参数httprouter.Handle.GET
而且我不太清楚为什么.
我的代码是:
package main
import (
"log"
"net/http"
"github.com/julienschmidt/httprouter"
"github.com/justinas/alice"
"gopkg.in/mgo.v2"
//"gopkg.in/mgo.v2/bson"
)
func middlewareOne(next http.Handler) http.Handler {
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
log.Println("Executing middlewareOne")
next.ServeHTTP(w, r)
log.Println("Executing middlewareOne again")
})
}
func middlewareTwo(next http.Handler) http.Handler {
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
log.Println("Executing middlewareTwo")
if r.URL.Path != "/" {
return
}
next.ServeHTTP(w, r)
log.Println("Executing middlewareTwo again")
})
}
func final(w http.ResponseWriter, r *http.Request) {
log.Println("Executing finalHandler")
w.Write([]byte("OK"))
}
func main() {
session, err := mgo.Dial("conn-string") …Run Code Online (Sandbox Code Playgroud) 在 中go-chi,在单个路由级别设置中间件,而不仅仅是针对所有路由全局设置
// Routes creates a REST router
func Routes() chi.Router {
r := chi.NewRouter()
r.Use(middleware.Captcha)
r.Post("/", Login)
return r
}
Run Code Online (Sandbox Code Playgroud)
如何Login指定唯一的中间件或从通用中间件中排除?
我有一个Java应用程序,其中许多线程正在快速写入StyledTextBox.在某些时候,所有线程都被终止.但是,TextBox继续接收一些文本,大概是因为调度队列有点备份了.是否有可能以某种方式强制刷新EDT,以便在线程终止时,TextBox的更新立即结束?
谢谢你,吉姆
我有以下 Gin 中间件:
func CheckAppId(appC *core.Context) gin.HandlerFunc {
return func(c *gin.Context) {
//get Basic Auth credentials
appId, token, _ := c.Request.BasicAuth()
if appId == "" {
c.JSON(http.StatusOK, gin.H{"code": "MISSING_APP_ID", "message": "Your request is missing an application id"})
return //this is being ignored???
}
c.Next() //this still gets hit
}
}
Run Code Online (Sandbox Code Playgroud)
但是如果appId == ""JSON 被返回c.Next()并被执行。这是预期的行为吗?
编辑 我以为问题已售出,但似乎正在发生同样的事情。我现在有:
func CheckAppId(appC *core.Context) gin.HandlerFunc {
return func(c *gin.Context) {
//get Basic Auth credentials
appId, token, _ := c.Request.BasicAuth()
if appId …Run Code Online (Sandbox Code Playgroud) I have a user.save route (below) in my Golang API that can be used to create and update a user depending on whether an id was provided in the request object. The route uses the auth middleware which other routes do too.
api.POST("/user.save", auth(), user.Save())
api.POST("/user.somethingElse", auth(), user.SomethingElse())
Run Code Online (Sandbox Code Playgroud)
Here is my middleware:
func auth() gin.HandlerFunc {
return func(c *gin.Context) {
//I would like to know here if user.save was the route called
//do authy stuff
}
}
Run Code Online (Sandbox Code Playgroud)
I'm thinking that …
我有以下代码:
package main
import (
"log"
"github.com/spf13/viper"
)
func main() {
viper.SetEnvPrefix("myprefix")
viper.SetDefault("languages", []string{"french", "spanish"})
viper.BindEnv("name")
viper.BindEnv("languages")
type config struct {
Name string
Languages []string
}
var C config
err := viper.Unmarshal(&C)
if err != nil {
log.Fatalln("unable to decode into struct, %v", err)
}
log.Println(C)
log.Println(len(C.Languages))
}
Run Code Online (Sandbox Code Playgroud)
当$MYPREFIX_LANGUAGES未设置C.Languages的长度为2(例如缺省值)。当我设置$MYPREFIX_LANGUAGES为“英语西班牙语法语”时,我得到的长度为1。它只是将变量作为1个长字符串,而不是一个切片。如何获得切片([]string{"english", "spanish", "french", "russian"}?
这是我的 GET 方法问题是我在 json 中得到的只是一个用户,而不是我的数据库中有 3 个用户。
func GetUsers(c *gin.Context) {
var users = db.Find(&models.Person{})
c.JSON(200, users)
}
Run Code Online (Sandbox Code Playgroud) 我有下面的结构
type foos struct { Foo string `json:"foo" binding:"required"`}
Run Code Online (Sandbox Code Playgroud)
我有以下端点
func sendFoo(c *gin.Context) {
var json *foos
if err := c.BindJSON(&json); err != nil {
c.AbortWithStatus(400)
return
}
// Do something about json
}
Run Code Online (Sandbox Code Playgroud)
当我发布此 JSON 时
{"bar":"bar bar"}
Run Code Online (Sandbox Code Playgroud)
错误始终为零。我写了需要绑定,但它不起作用。但是当我像下面这样更改端点时,
func sendFoo(c *gin.Context) {
var json foos //remove pointer
if err := c.BindJSON(&json); err != nil {
c.AbortWithStatus(400)
return
}
// Do something about json
}
Run Code Online (Sandbox Code Playgroud)
绑定有效,错误不是零。为什么?