小编Dum*_*s45的帖子

在私有内部类的字段的访问修饰符中是否有任何意义?

假设我有一个带有内部类的外部类.内部类有四个字段,包含所有可能的访问修饰符.

class Outer {
    private class Inner {
        public int publicField;
        protected int protectedField;
        int packagePrivatefield;
        private int privateField;
    }

    void doSomethingWithFields() {
        Inner inner = new Inner();
        inner.publicField = 111;
        inner.protectedField = 111;
        inner.packagePrivatefield = 111;
        inner.privateField = 111;
    }
}
Run Code Online (Sandbox Code Playgroud)

内部类是私有的,所以我不能在Outer类之外创建它的实例.在Outer类中,如果我创建内部类的实例并尝试更改每个字段的值,我将成功地执行此操作.所以我看到上述字段的访问修饰符没有任何意义.在那儿?

编辑:主要问题是: 我应该为私人内部成员选择哪些访问修饰符?内部类不仅可以实现接口.我可以把一些带有逻辑的困难结构放进去.

java

11
推荐指数
1
解决办法
153
查看次数

数字.access $ XXXX代表什么?

我在堆栈中有一个字符串,例如"at alexei.ATable $ IndexOfATable.access $ 1400(ATable.java:80)"

我很有趣,1400的数字是多少?内部类IndexOfATable只有3个字段,而不是1400个字段.

有趣的是,为什么1400这么大?

debug:
Exception in thread "main" java.lang.NullPointerException
    at alexei.ATable$IndexOfATable.compareTwoRows(ATable.java:181)
    at alexei.ATable$IndexOfATable.access$1400(ATable.java:80)
    at alexei.ATable.updateIndex(ATable.java:501)
    at alexei.ATable.addRow(ATable.java:361)
    at learn.Base.main(Base.java:18)
Java Result: 1
Run Code Online (Sandbox Code Playgroud)

java

8
推荐指数
1
解决办法
3937
查看次数

如何使用BoxLayout在容器内设置组件大小

面对使用BoxLayout的问题

在我的示例中,我尝试降低文本字段的高度并更改按钮的宽度(如图中的绿色标记所示).我知道setPrefferedSize()和setMaximumSize()技术,但它没有按预期工作.行添加(Box.createHorizo​​ntalGlue())也没有帮助.

谢谢你的想法

public class Testy extends JPanel {
    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                constructGUI();
            }
        });
    }

    private static void constructGUI() {
        JFrame frame = new JFrame("Testy");
        frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);

        JPanel centerPanel = new JPanel();
        centerPanel.setBackground(Color.DARK_GRAY);
        centerPanel.setPreferredSize(new Dimension(100, 400));
        frame.add(centerPanel, BorderLayout.CENTER);

        Testy eastPanel = new Testy();
        frame.add(eastPanel, BorderLayout.EAST);

        frame.pack();
        frame.setVisible(true);
    }

    public Testy() {
        setLayout(new BoxLayout(this, BoxLayout.PAGE_AXIS));

        JButton button = new JButton("Button ...... 1");
        //button.setPreferredSize(...);
        //button.setMaximumSize(...);
        add(button);

        button = new JButton("Button 2"); …
Run Code Online (Sandbox Code Playgroud)

java layout swing layout-manager boxlayout

8
推荐指数
1
解决办法
4万
查看次数

将不带布局的面板添加到BorderLayout的北部

同事。

我正在尝试用Java构建简单的GUI,其中JFrame具有Border Layout。我想将带有JTable的JScrollPane放到CENTER,将没有布局的JPanel放到NORTH。

问题是JPanel不可见。这个问题有一个简单的例子:

JFrame frame = new JFrame("Test frame");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

JButton button = new JButton("Test button");
button.setBounds(10, 10, 40, 20);

JPanel panelN = new JPanel(null); // layout = null, panelN without layout
panelN.add(button);
frame.add(panelN, BorderLayout.NORTH);

JTable table = new JTable(new DefaultTableModel(4, 4));
JScrollPane scrollPane = new JScrollPane(table);
frame.add(scrollPane, BorderLayout.CENTER);

frame.setSize(400, 400);
frame.setVisible(true);
Run Code Online (Sandbox Code Playgroud)

java layout swing border-layout absolutelayout

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

使用jpcap获取完整的TCP数据包数据

我使用了jpcap教程中的一个简单程序.我想在端口4444上侦听我的其他客户端 - 服务器应用程序.我遇到了一个问题:方法TCPPacket.getTCPData()返回byte []数组,限制为30个元素.我知道数据包包含超过30个字节的有用数据,不包括TCP头字节.

如何获取超过30个字节的数据包数据?

我查了一下,方法tcpPacket.getPayloadDataLength()返回超过500,而TCPPacket.getTCPData()返回一个30字节的数组......为什么只有30?

代码在这里

public class Test {
    public static void main(String[] args) {
        try {
            Test test = new Test(PacketCapture.lookupDevices()[5].trim().split("\\s")[0]);
        } catch(Exception e) {
            e.printStackTrace();
        }
    }

    public Test(String device) throws Exception {
        // Initialize jpcap
        PacketCapture pcap = new PacketCapture();
        System.out.println("Using device '" + device + "'");
        pcap.open(device, true);
        pcap.setFilter("port 4444", true);
        pcap.addPacketListener(new PacketHandler());

        System.out.println("Capturing packets...");
        pcap.capture(-1); // -1 is infinite capturing
    }
}


class PacketHandler implements PacketListener {
    BufferedOutputStream stream;

    public PacketHandler() throws IOException …
Run Code Online (Sandbox Code Playgroud)

java sniffer pcap packet-sniffers jpcap

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

java最终变量和性能

如果java代码用最终变量过饱和,这样好吗?我考虑性能.据我所知,最终变量是线程安全的.因此,对于最终变量的每个初始化,jvm必须在所有线程之间同步其值.如果我在每个我希望变量不可修改的情况下使用最终变量,它会达到性能吗?

我期望并担心最终变量会降低性能.

java performance multithreading

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

C++在屏幕中央绘制一个小点

我想在屏幕中央画一个小点,以便在运行任何应用程序后都必须保留.在全屏模式下启动应用程序后,点应该保持不变.像死像素一样.

我已经在Windows 7的计算机上安装了Visual C++.我有一些使用C++的经验,但我从未使用过Windows操作系统下的图形.

如何在屏幕上画一个点?

c++ graphics

0
推荐指数
1
解决办法
1717
查看次数