假设我有一个带有内部类的外部类.内部类有四个字段,包含所有可能的访问修饰符.
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类中,如果我创建内部类的实例并尝试更改每个字段的值,我将成功地执行此操作.所以我看到上述字段的访问修饰符没有任何意义.在那儿?
编辑:主要问题是: 我应该为私人内部成员选择哪些访问修饰符?内部类不仅可以实现接口.我可以把一些带有逻辑的困难结构放进去.
我在堆栈中有一个字符串,例如"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) 面对使用BoxLayout的问题
在我的示例中,我尝试降低文本字段的高度并更改按钮的宽度(如图中的绿色标记所示).我知道setPrefferedSize()和setMaximumSize()技术,但它没有按预期工作.行添加(Box.createHorizontalGlue())也没有帮助.
谢谢你的想法
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构建简单的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) 我使用了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代码用最终变量过饱和,这样好吗?我考虑性能.据我所知,最终变量是线程安全的.因此,对于最终变量的每个初始化,jvm必须在所有线程之间同步其值.如果我在每个我希望变量不可修改的情况下使用最终变量,它会达到性能吗?
我期望并担心最终变量会降低性能.
我想在屏幕中央画一个小点,以便在运行任何应用程序后都必须保留.在全屏模式下启动应用程序后,点应该保持不变.像死像素一样.
我已经在Windows 7的计算机上安装了Visual C++.我有一些使用C++的经验,但我从未使用过Windows操作系统下的图形.
如何在屏幕上画一个点?