我最近了解到Sun的/ Oracle最新指南说,任何Swing对象(包括构造函数)的Swing方法都不能在EDT之外调用.
相同的严格标准是否也适用于所有"视觉"AWT课程?如果没有,**对他们来说是什么规则?
后来
re Swing和EDT:2009年的讨论.
引用:"除了实际的线程安全性和相关问题,如可见性和同步,我认为是一个软件问题.Swing组件通常具有某种类型的"监听器",并且这些监听器设计为在EDT上执行.
由于这些侦听器是异步的并且响应事件(如属性更改),因此可以在构建GUI时触发这些侦听器.结果是,当您在主线程中构建时,某些侦听器正在EDT上执行,并且一些侦听器也可能在其他线程上运行(因为侦听器混淆并在错误的线程上触发).结果是巨大的不可预测的混乱."
也许他们不知道他们在谈论什么......但目前我采取的是"更安全而不是抱歉"的方法.Potochkin,http: //weblogs.java.net/blog/alexfromsun/archive/2006/02/debugging_swing.html 似乎也认为我们熟悉后来更严格的规则
我已经制作了一个非常简单的代码来显示它,我有一个按钮,应该显示一个JDialog来检查进度状态,我使用调用后期通过EDT而我的循环不在run方法中,所以为什么不是我的酒吧更新?这是代码
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JProgressBar;
import javax.swing.JTextField;
import javax.swing.SwingUtilities;
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class JBarEx extends JFrame {
private JTextField progStatus = new JTextField("Undefined");
private JButton dialogBtn = new JButton("Show Progression dialog");
final JDialog dlg = new JDialog((JFrame) null, "prog Title", false);
final JProgressBar dpb = new JProgressBar(0, 100);
public JBarEx() {
JPanel pan = new JPanel();
dialogBtn.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated …Run Code Online (Sandbox Code Playgroud) 我需要在 Go 中对 int64 的大值执行取幂和除法等操作,但我遇到了溢出问题。我尝试将它们转换为 float64,但后来遇到了其他问题。这是我尝试过的。
我有一个整数变量,我必须将其转换为 float64 才能使用方便的数学包 ( https://golang.org/pkg/math )。
但是,当整数变量太大时,它不会正确转换。我假设这是因为大小大于 float64。前任:
fmt.Printf("%f",float64(111111111111111110)) //Outputs 111111111111111104.000000
Run Code Online (Sandbox Code Playgroud)
我正在尝试使用 math.Mod、math.Pow10 和 math.Log10。我如何才能执行以下逻辑,但上面显示的数字很大?
int(math.Mod(float64(123) / math.Pow10(1),10))) // Gets the second digit
Run Code Online (Sandbox Code Playgroud) 我正在使用github.com/pressly/chi构建这个简单的程序,我尝试从以下位置解码一些 JSON http.Request.Body:
package main
import (
"encoding/json"
"fmt"
"net/http"
"github.com/pressly/chi"
"github.com/pressly/chi/render"
)
type Test struct {
Name string `json:"name"`
}
func (p *Test) Bind(r *http.Request) error {
err := json.NewDecoder(r.Body).Decode(p)
if err != nil {
return err
}
return nil
}
func main() {
r := chi.NewRouter()
r.Post("/products", func(w http.ResponseWriter, r *http.Request) {
var p Test
// err := render.Bind(r, &p)
err := json.NewDecoder(r.Body).Decode(&p)
if err != nil {
panic(err)
}
fmt.Println(p)
})
http.ListenAndServe(":8080", r)
} …Run Code Online (Sandbox Code Playgroud) 在catch块中,我想向textArea显示一条错误消息,以显示发生的错误.
我已经开始研究Go了,我想了解下面发生的事情:
time.Sleep(1000 * time.Millisecond) // Works
time.Sleep("1000ms") // Doesn't work
Run Code Online (Sandbox Code Playgroud)
如果您打印到控制台,time.Milliseconds您可以看到1ms.所以我认为我可以简单地用值调用该方法"1000ms",但是我得到一个错误.接下来我在Go中搜索了运算符重载,但它不支持它.我知道time.Sleep获取time.Milliseconds数据类型,但如果它不支持重载运算符,Go如何允许它*?