Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/20.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
使用JavaSwing的Ruby表示计数为零_Ruby_Swing_Jruby - Fatal编程技术网

使用JavaSwing的Ruby表示计数为零

使用JavaSwing的Ruby表示计数为零,ruby,swing,jruby,Ruby,Swing,Jruby,您好,我是javax.swing的新手,我想问你们为什么我会出现这个错误(我将在我的代码后面加上确切的错误)。我已经尝试了我能找到的一切。谢谢你们,如果这是一个简单的解决办法,我很抱歉,我现在在ruby方面真的很差劲 testGui.rb #javaSwingHello.rb 需要“java”#第2行 JFrame=javax.swing.JFrame JLabel=javax.swing.JLabel JPanel=javax.swing.JPanel JButton=javax.swing.

您好,我是javax.swing的新手,我想问你们为什么我会出现这个错误(我将在我的代码后面加上确切的错误)。我已经尝试了我能找到的一切。谢谢你们,如果这是一个简单的解决办法,我很抱歉,我现在在ruby方面真的很差劲
testGui.rb

#javaSwingHello.rb
需要“java”#第2行
JFrame=javax.swing.JFrame
JLabel=javax.swing.JLabel
JPanel=javax.swing.JPanel
JButton=javax.swing.JButton
BorderFactory=javax.swing.BorderFactory
BorderLayout=java.awt.BorderLayout
GridLayout=java.awt.GridLayout
计数=1
frame=JFrame.new
panel=JPanel.new
button=JButton.new“单击我”
button.addActionListener self
label=JLabel.new“点击次数:0”
panel.setboorder BorderFactory.createEmptyByOrder(70,70,20,70)
panel.setLayout GridLayout.new(0,1)
panel.add按钮
panel.add标签
frame.add面板,BorderLayout::CENTER
frame.setDefaultCloseOperation(JFrame::在关闭时退出)
frame.setTitle“测试GUI”
frame.pack
frame.setVisible true
已执行的def操作(事件)
计数+=1
texttoset=“点击次数”+计数
label.setText(texttoset)
结束
错误(我按下按钮时收到此信息)


更多的Ruby问题-局部变量不会被复制到新的作用域中:

def actionPerformed(事件)
计数+=1
texttoset=“点击次数”+计数
label.setText(texttoset)
结束
count
是方法的局部变量(最初为
nil
),因此失败

如果您只是在进行测试,您可以使用全局

$count = 1

def actionPerformed(event)
    $count += 1
    texttoset = "Number of clicks " + count
    label.setText(texttoset)
end

也就是说,不要使用globals,而是设置一个适当的对象来封装状态并“实现”执行的
操作接口。

您没有说,您将如何使用
执行的操作
,但一种可能性是将该方法设为lambda:

您必须将其作为

$ActionPerformed.call(myEvent)

actionPerformed
中的
count
变量与以前使用的
count
不同。如果确实要创建闭包,则需要使用块。
count = 1
$ActionPerformed = -> (event) do
    count += 1
    texttoset = "Number of clicks " + count
    label.setText(texttoset)
end
$ActionPerformed.call(myEvent)