Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/303.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/api/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
货币兑换API Java GUI_Java_Api_Rest_Currency - Fatal编程技术网

货币兑换API Java GUI

货币兑换API Java GUI,java,api,rest,currency,Java,Api,Rest,Currency,我对这个级别的编程相当陌生,我想知道是否有人能帮我解决这个问题 因此,我试图使用Java创建一个货币兑换应用程序,但在更新GUI上的值以反映API上的新值时遇到了问题。实际上,值经常会更改,并显示在控制台上,但是,GUI值从不更新,并且保持不变 我原以为ActionListener可以帮助解决这个问题,但要么我没有正确地实现它,要么我没有通过谷歌搜索找到正确的解决方案 提前感谢您的帮助:) 这是我的密码: GUI.java 结果: 欧元兑澳元:1.646659 过一段时间后 欧元兑澳元:1.64

我对这个级别的编程相当陌生,我想知道是否有人能帮我解决这个问题

因此,我试图使用Java创建一个货币兑换应用程序,但在更新GUI上的值以反映API上的新值时遇到了问题。实际上,值经常会更改,并显示在控制台上,但是,GUI值从不更新,并且保持不变

我原以为ActionListener可以帮助解决这个问题,但要么我没有正确地实现它,要么我没有通过谷歌搜索找到正确的解决方案

提前感谢您的帮助:)

这是我的密码: GUI.java

结果: 欧元兑澳元:1.646659 过一段时间后 欧元兑澳元:1.646659

预期结果: 欧元兑澳元:1.646659 过一段时间后
EUR-AUD:1.80102

您的计时器和事件处理程序看起来不错,但更新方法仅将新值获取到Arb对象中;没有任何东西可以接受这些值并将它们放入GUI中。在update方法返回后,可以在事件处理程序中显式执行此操作。要启用此功能,您可能需要将FXRate设置为成员变量,以便可以从操作侦听器访问它。

引用在Java中按值传递


在事件侦听器中,您需要使用更新的字符串调用
setText
,以实际使文本字段显示该字符串。

好吧,您永远不会在任何地方更新UI。您需要调用FXRate.setText(“我的新字符串”);设置一个新的文本。在设置了初始字符串.Dwarsaw之后,您从来没有这样做过,我已经自由地编辑了您在请求中包含的data.fixer.io API键。这很可能是偶然的,但是您应该非常小心,不要公开发布任何服务的API密钥。这包括Github源代码和堆栈溢出问题。公开这些APÏ密钥可能会让其他人以你的名义提出请求,并可能让你付出大量的服务成本。@Nzall Gotcha,我刚刚注册了一个免费帐户,并没有太多麻烦,但谢谢你,将来不会使用它。@saw否。更新变量的内容不会更新面板上的文本。您实际上需要调用
JTextPane.SetText(“我的新字符串”)
;设置另一个文本。引用是通过值传递的,而不是作为指针。@Dwarsaw您可能想检查一下,创建成员变量实际上只是创建GUI.java的全局/静态变量吗?@Dwarsaw是的,我相信您理解任务,但不是的,因为您的语言是错误的(java没有全局变量,并且是“静态的”)意味着别的东西);但是,是的,在GUI类主体的范围内创建一个变量。所以,如果我做对了,没有全局变量,但是可以有公共变量,可以被其他类引用,对吗?静态是特定于类的,从某种意义上说是“静态”的,对吗?我不能在这里详细介绍所有细节,但是是的,公共成员变量存在于类或对象的范围内,并且对所有其他代码都是可见的。“静态”成员(公共或非公共)的作用域为类,并由该类的所有实例共享,而非静态成员属于每个实例。除非您确实需要它们,否则避免公共和静态。
public class GUI extends JFrame {
    
    static Arb arb = new Arb();

    private JPanel contentPane;
  public static void main(String[] args) throws IOException, InterruptedException {
        
        ActionListener taskPerformer = new ActionListener() {
             public void actionPerformed(ActionEvent evt) {
                 try {
                    arb.runUpdate_fx("anAPI");
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
             }
         };
         Timer timer = new Timer(100 ,taskPerformer);
         timer.setRepeats(true);
         timer.start();
 
         Thread.sleep(5000);
        
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    GUI frame = new GUI();
                    frame.setVisible(true);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }

    public GUI() {
      setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      setBounds(100, 100, 1121, 765);
      contentPane = new JPanel();
      contentPane.setBackground(Color.BLACK);
      contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
      contentPane.setLayout(new BorderLayout(0, 0));
      setContentPane(contentPane);

      JTextPane FXRate = new JTextPane();
      FXRate.setForeground(new Color(255, 255, 255));
      FXRate.setBackground(new Color(0, 0, 0));
      FXRate.setEditable(false);
      FXRate.setFont(new Font("Tahoma", Font.BOLD, 11));
      panel_1.setLayout(new FlowLayout(FlowLayout.LEADING, 5, 5));
      FXRate.setText("FX Rates\r\n\r\nEUR-AUD FX Rate: " + arb.fxEURAUD + "\r\nEUR-USD FX Rate: " + arb.fxEURUSD);
      panel_1.add(FXRate);
    }
}
JTextField textField = new JTextField();
String text = "Initial text";
textField.setText(text); // no displays "Initial text";
text = "Updated text"; // doesn't change what the panel displays
// the panel still holds a reference to the old text
textField.setText(text); // updates the reference the panel holds to your new text