- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用首选项来保存 JFrame 的位置,因此当它再次出现时,它应该位于与之前退出时相同的位置。我让它在我的计算机上运行,但似乎在我测试过的其他 3 台计算机上不起作用。我将项目导出为 jar 文件,并让人们使用该 jar 文件执行该程序。
框架的位置不会保存,它将始终出现在屏幕的左上角。
这是我第一次使用首选项,我多次查看 API,但似乎看不出我做错了什么。有人可以解释一下为什么它只能在我的电脑上运行吗?
首选项设置位于类(class)的底部。
SSCCE:
public class PreferencesTest implements ActionListener {
private JButton wrongButton, level1Button, level2Button, level3Button,
level4Button, level5Button, dontInterruptButton, reviewCardButton;
private JLabel frontTextLabel, reverseTextLabel, frontLabel;
private JPanel frontOfCardPanel, reverseOfCardPanel, buttonPanel,
reverseButtonPanel, reverseTextPanel, frontLabelPanel;
private JFrame frame;
private String windowTitle;
private int windowX;
private int windowY;
private Preferences preferences = null;
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
new PreferencesTest();
}
});
}
public PreferencesTest() {
this.windowX = getPreferences().getInt("window_x", -1);
this.windowY = getPreferences().getInt("window_y", -1);
frame = new JFrame();
frontOfCardPanel = new JPanel(new BorderLayout());
reverseOfCardPanel = new JPanel(new BorderLayout());
wrongButton = new JButton("Wrong");
level1Button = new JButton("Almost");
level2Button = new JButton("OK");
level3Button = new JButton("Good");
level4Button = new JButton("Great");
level5Button = new JButton("Excellent");
dontInterruptButton = new JButton("Don't interrupt this program");
reviewCardButton = new JButton("Review");
frontTextLabel = new JLabel("test", JLabel.CENTER);
reverseTextLabel = new JLabel("test", JLabel.CENTER);
frontLabel = new JLabel("test", JLabel.CENTER);
frontTextLabel.setFont(new Font("Serif", Font.PLAIN, 20));
frontLabel.setFont(new Font("Serif", Font.PLAIN, 40));
reverseTextLabel.setFont(new Font("Serif", Font.PLAIN, 40));
buttonPanel = new JPanel(new FlowLayout());
reverseButtonPanel = new JPanel(new FlowLayout());
reverseTextPanel = new JPanel(new GridLayout(2, 1));
reverseButtonPanel.add(wrongButton);
reverseButtonPanel.add(level1Button);
reverseButtonPanel.add(level2Button);
reverseButtonPanel.add(level3Button);
reverseButtonPanel.add(level4Button);
reverseButtonPanel.add(level5Button);
frontLabelPanel = new JPanel();
frontLabelPanel.add(frontLabel);
frontOfCardPanel.add(buttonPanel, BorderLayout.SOUTH);
frontOfCardPanel.add(frontLabelPanel, BorderLayout.NORTH);
frame.pack();
frame.setContentPane(frontOfCardPanel);
reverseTextPanel.add(reverseTextLabel);
reverseTextPanel.add(frontTextLabel);
buttonPanel.add(reviewCardButton);
buttonPanel.add(dontInterruptButton);
reverseOfCardPanel.add(reverseTextPanel, BorderLayout.CENTER);
reverseOfCardPanel.add(reverseButtonPanel, BorderLayout.SOUTH);
wrongButton.addActionListener(this);
level1Button.addActionListener(this);
level2Button.addActionListener(this);
level3Button.addActionListener(this);
level4Button.addActionListener(this);
level5Button.addActionListener(this);
dontInterruptButton.addActionListener(this);
reviewCardButton.addActionListener(this);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(500, 220);
frame.setResizable(false);
frame.toFront();
frame.repaint();
frame.addWindowListener(new java.awt.event.WindowAdapter() {
public void windowClosing(java.awt.event.WindowEvent e) {
setWindowXY();
frame.setVisible(false);
}
});
frame.setLocation(windowX, windowY);
frame.setVisible(true);
}
@Override
public void actionPerformed(ActionEvent event) {
if (event.getActionCommand() == "Review") {
frame.remove(frontOfCardPanel);
frame.setContentPane(reverseOfCardPanel);
frame.validate();
frame.repaint();
} else if (event.getActionCommand() == "Wrong") {
setWindowXY();
System.exit(1);
flashcardAction(0);
} else if (event.getActionCommand() == "Almost") {
setWindowXY();
System.exit(1);
flashcardAction(1);
} else if (event.getActionCommand() == "OK") {
setWindowXY();
System.exit(1);
flashcardAction(2);
} else if (event.getActionCommand() == "Good") {
setWindowXY();
System.exit(1);
flashcardAction(3);
} else if (event.getActionCommand() == "Great") {
setWindowXY();
System.exit(1);
flashcardAction(4);
} else if (event.getActionCommand() == "Excellent") {
setWindowXY();
System.exit(1);
flashcardAction(5);
} else if (event.getActionCommand() == "Don't interrupt this program") {
System.exit(1);
System.out.println(" window title in event = " + windowTitle);
frame.setVisible(false);
}
}
public void flashcardAction(int userResponse) {
System.out.println(frame.getLocationOnScreen());
setVisible(false);
}
public void setVisible(Boolean visible) {
frame.setVisible(visible);
}
// ////// preferences
public Preferences getPreferences() {
if (preferences == null) {
preferences = Preferences
.systemNodeForPackage(PreferencesTest.class);
}
return preferences;
}
public int getWindowX() {
return windowX;
}
public int getWindowY() {
return windowY;
}
public void setWindowXY() {
windowX = frame.getX();
getPreferences().putInt("window_x", windowX);
windowY = frame.getY();
getPreferences().putInt("window_y", windowY);
}
}
编辑:我没有解释它的行为有什么问题。
最佳答案
您正在使用systemNodeForPackage 。这将返回系统首选项,而不是用户首选项。
它在一个系统上工作的原因可能是因为您在那里以管理员用户身份运行它(我猜您正在使用 WinXP 或类似的东西,通常以管理员用户身份运行)。管理员用户可以毫无问题地写入系统首选项树。
在其他更成熟的操作系统上,如果没有提升的访问权限,则无法写入系统节点。正确的方法是使用用户节点(方法 userNodeForPackage )。
Java 有两个独立的首选项根,一个用于系统,一个用于用户。根据您的情况使用正确的方法。窗口位置显然是用户偏好。
参见https://blogs.oracle.com/CoreJavaTechTips/entry/the_preferences_api
关于java - 为什么我的 Java 首选项代码不能在所有计算机上运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15202620/
我正在编写一个具有以下签名的 Java 方法。 void Logger(Method method, Object[] args); 如果一个方法(例如 ABC() )调用此方法 Logger,它应该
我是 Java 新手。 我的问题是我的 Java 程序找不到我试图用作的图像文件一个 JButton。 (目前这段代码什么也没做,因为我只是得到了想要的外观第一的)。这是我的主课 代码: packag
好的,今天我在接受采访,我已经编写 Java 代码多年了。采访中说“Java 垃圾收集是一个棘手的问题,我有几个 friend 一直在努力弄清楚。你在这方面做得怎么样?”。她是想骗我吗?还是我的一生都
我的 friend 给了我一个谜语让我解开。它是这样的: There are 100 people. Each one of them, in his turn, does the following
如果我将使用 Java 5 代码的应用程序编译成字节码,生成的 .class 文件是否能够在 Java 1.4 下运行? 如果后者可以工作并且我正在尝试在我的 Java 1.4 应用程序中使用 Jav
有关于why Java doesn't support unsigned types的问题以及一些关于处理无符号类型的问题。我做了一些搜索,似乎 Scala 也不支持无符号数据类型。限制是Java和S
我只是想知道在一个 java 版本中生成的字节码是否可以在其他 java 版本上运行 最佳答案 通常,字节码无需修改即可在 较新 版本的 Java 上运行。它不会在旧版本上运行,除非您使用特殊参数 (
我有一个关于在命令提示符下执行 java 程序的基本问题。 在某些机器上我们需要指定 -cp 。 (类路径)同时执行java程序 (test为java文件名与.class文件存在于同一目录下) jav
我已经阅读 StackOverflow 有一段时间了,现在我才鼓起勇气提出问题。我今年 20 岁,目前在我的家乡(罗马尼亚克卢日-纳波卡)就读 IT 大学。足以介绍:D。 基本上,我有一家提供簿记应用
我有 public JSONObject parseXML(String xml) { JSONObject jsonObject = XML.toJSONObject(xml); r
我已经在 Java 中实现了带有动态类型的简单解释语言。不幸的是我遇到了以下问题。测试时如下代码: def main() { def ks = Map[[1, 2]].keySet()
一直提示输入 1 到 10 的数字 - 结果应将 st、rd、th 和 nd 添加到数字中。编写一个程序,提示用户输入 1 到 10 之间的任意整数,然后以序数形式显示该整数并附加后缀。 public
我有这个 DownloadFile.java 并按预期下载该文件: import java.io.*; import java.net.URL; public class DownloadFile {
我想在 GUI 上添加延迟。我放置了 2 个 for 循环,然后重新绘制了一个标签,但这 2 个 for 循环一个接一个地执行,并且标签被重新绘制到最后一个。 我能做什么? for(int i=0;
我正在对对象 Student 的列表项进行一些测试,但是我更喜欢在 java 类对象中创建硬编码列表,然后从那里提取数据,而不是连接到数据库并在结果集中选择记录。然而,自从我这样做以来已经很长时间了,
我知道对象创建分为三个部分: 声明 实例化 初始化 classA{} classB extends classA{} classA obj = new classB(1,1); 实例化 它必须使用
我有兴趣使用 GPRS 构建车辆跟踪系统。但是,我有一些问题要问以前做过此操作的人: GPRS 是最好的技术吗?人们意识到任何问题吗? 我计划使用 Java/Java EE - 有更好的技术吗? 如果
我可以通过递归方法反转数组,例如:数组={1,2,3,4,5} 数组结果={5,4,3,2,1}但我的结果是相同的数组,我不知道为什么,请帮助我。 public class Recursion { p
有这样的标准方式吗? 包括 Java源代码-测试代码- Ant 或 Maven联合单元持续集成(可能是巡航控制)ClearCase 版本控制工具部署到应用服务器 最后我希望有一个自动构建和集成环境。
我什至不知道这是否可能,我非常怀疑它是否可能,但如果可以,您能告诉我怎么做吗?我只是想知道如何从打印机打印一些文本。 有什么想法吗? 最佳答案 这里有更简单的事情。 import javax.swin
我是一名优秀的程序员,十分优秀!