我正在编写一个最终将在Linux上运行的Jython应用程序。我在Windows机器上开发,当我在Linux上测试时,我的行为不一致。
在Windows中,使用Java或Jython,我得到了我认为是'正常'的JComboBox行为:
在Linux上,我从Java中获得以下行为:
在Linux上,我从Jython获得以下行为:
这是我的Java SSCCE:
package foo;
import javax.swing.*;
import java.awt.*;
public class Foo extends JPanel{
public Foo(){
super(new BorderLayout());
String[] contents = {"Foo", "Bar", "Baz"};
JComboBox combo = new JComboBox(contents);
add(combo, BorderLayout.PAGE_START);
}
private static void BuildAndShow(){
JFrame mainWindow = new JFrame("Testing");
mainWindow.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//Create and set up the content pane.
JComponent contentPane = new Foo();
contentPane.setOpaque(true); //content panes must be opaque
mainWindow.setContentPane(contentPane);
//Display the window.
mainWindow.pack();
mainWindow.setVisible(true);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
BuildAndShow();
}
});
}
}
这是我的Jython SSCCE:
from java.lang import Runnable
from javax.swing import SwingUtilities, JFrame, JComboBox
from java.awt import BorderLayout
import time
class Foo(Runnable):
def run(self):
mainWindow = JFrame('Test', defaultCloseOperation = JFrame.EXIT_ON_CLOSE)
mainWindow.setLayout(BorderLayout())
mainWindow.add(JComboBox(["Foo", "Bar", "Baz"]), BorderLayout.PAGE_START)
mainWindow.visible = True
if __name__ == "__main__":
app = Foo()
SwingUtilities.invokeLater(app)
while True:
time.sleep(5)
答案 0 :(得分:0)
在最终实际访问我已远程测试的Linux机器之后,一切正常。
事实证明,这个问题与SSH,XMing以及为在Linux机器上进行显示转发而设置的任何组合有关。
向任何花时间处理无法回答的问题的人致歉!