相关疑难解决方法(0)

关于Java的字符串池的问题

考虑以下代码:

String first = "abc"; 
String second = new String("abc");
Run Code Online (Sandbox Code Playgroud)

使用new关键字时,Java会abc String再次创建吗?这会存储在常规堆还是String池中?多少人String在将s结尾String池?

java string string-pool

68
推荐指数
3
解决办法
2万
查看次数

为什么JPasswordField.getPassword()会创建一个包含密码的String?

Swing的JPasswordFieldgetPassword()一个返回字符数组的方法.我对此的理解是,数组可以在使用后立即归零,这样你就不会在内存中长时间存在敏感的东西.检索密码的旧方法是使用getText(),它返回一个String对象,但它已被弃用.

所以,我的问题是为什么Java在检索过程中实际使用它getPassword()?为了更清楚,我正在调试我的测试应用程序的其他东西**,我跟着调用和爆炸... getText()JPasswordField被调用,当然,一个很好的String对象与我的密码已经创建,现在挂在内存.

亲自尝试一下:

public class PasswordTest() {
    public static void main(String[] args) {
        JFrame frame = new JFrame();
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        JPasswordField passField = new JPasswordField();
        pass.addActionListener(new ActionListener() {
            public ActionPerformed(ActionEvent evt) {
                char[] p = passField.getPassword(); // put breakpoint
                // do something with the array
            }
        });
        frame.add(passField);
        frame.setVisible(true);
        frame.pack();
    }
}
Run Code Online (Sandbox Code Playgroud)

跟进问题:这种"隐藏"的getText()危险用途是什么?当然,如果一个专门的攻击者破坏了系统,它会获得你的密码,我说的是一个不那么专注的密码;)

**我在寻找一种在不使用String对象的情况下在Swing组件上实际显示一些敏感数据的方法时遇到了这个问题.显然除非我愿意重写Swing API的部分(全部?),否则无法做到这一点.不会发生.

java security passwords swing

27
推荐指数
3
解决办法
9万
查看次数

Java Swing:如何在显示JFrame之前实现登录屏幕?

我正在尝试制作一个小游戏,首先会向玩家展示一个简单的登录界面,他们可以输入他们的名字(我稍后需要它来存储他们的游戏状态信息),让他们选择一个难度级别等,并且只会一旦玩家点击了播放按钮,就会显示主游戏画面.我也想让玩家导航到一个(希望对于他们相当大的)奖杯收藏,同样在他们看来是一个新的屏幕.

到目前为止,我有一个主要的游戏窗口,其中有一个网格布局和一个有效的游戏(Yay for me!).现在我想添加上述功能.

我该怎么做呢?我不认为我想要去多个JFrame路线,因为我一次只想在任务栏中看到一个图标(或者将它们的可见性设置为假图标也是如此?)我是否制作并销毁布局或面板或者这样的事情?

我有什么选择?如何控制正在显示的内容?特别是考虑到我的新手技巧?

java user-interface swing login jframe

9
推荐指数
2
解决办法
1万
查看次数

窃取垃圾收集的东西有多容易?

为什么getText()在JPasswordField中被弃用了?

根据上述问题的答案,我理解的是创建一个String包含密码的对象是一种安全威胁,因为它可能会在内存中保留一段时间而且是不可变的.

所以我想知道,

  • 检索一直挂在内存中的东西,没有引用或遗漏垃圾收集是多么容易?

  • 你是怎么做到的?


编辑

由于问题已经结束,请善意通过添加评论来分享您的知识,如果您认为将来可能会得到有趣的答案,请考虑重新打开问题.:)

java memory security string garbage-collection

7
推荐指数
1
解决办法
162
查看次数

在卡布局内定位组件

我有一个主框架,我想用卡片布局在中心位置显示我的NewUser类的对象.这是我的主要课程

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;



public class CardLayoutDemo implements ItemListener {
JPanel cards; //a panel that uses CardLayout
final static String BUTTONPANEL = "Card with JButtons";
final static String TEXTPANEL = "Card with JTextField";

public void addComponentToPane(Container pane) {
    //Put the JComboBox in a JPanel to get a nicer look.
    JPanel comboBoxPane = new JPanel(); //use FlowLayout
    String comboBoxItems[] = { BUTTONPANEL, TEXTPANEL };
    JComboBox cb = new JComboBox(comboBoxItems);
    cb.setEditable(false);
    cb.addItemListener(this);
    comboBoxPane.add(cb);

    //Create the "cards".
    NewUser newUser = …
Run Code Online (Sandbox Code Playgroud)

java swing awt layout-manager cardlayout

3
推荐指数
1
解决办法
2960
查看次数