我正在尝试加载图像以用作我的应用程序中的图标.根据本教程的适当方法是:
protected ImageIcon createImageIcon(String path, String description)
{
java.net.URL imgURL = getClass().getResource(path);
if (imgURL != null) {
return new ImageIcon(imgURL, description);
} else {
System.err.println("Couldn't find file: " + path);
return null;
}
}
Run Code Online (Sandbox Code Playgroud)
因此,我放置了文件的位置,并将其作为参数传递给此函数.这不起作用,即imgURL为null.当我尝试通过显式传递路径来创建ImageIcon时:
ImageIcon icon = new ImageIcon(path,"My Icon Image");
Run Code Online (Sandbox Code Playgroud)
它工作得很好!因此,应用程序可以从显式定义的路径中获取图像,但是没有使用getResources()来获取图像.在这两种情况下,path变量的值都是相同的.为什么它不起作用?如何通过类加载器找到资源?
谢谢.
我们正在努力减少延迟并提高用Java编写的进程的性能,该进程通过BufferedReader类的readLine()方法从套接字使用数据(xml字符串).数据由行结束分隔符(\n)分隔,每行可以是可变长度(6KBits - 32KBits).我们的代码如下:
Socket sock = connection;
InputStream in = sock.getInputStream();
BufferedReader inputReader = new BufferedReader(new InputStreamReader(in));
...
do
{
String input = inputReader.readLine();
// Executor call to parse the input thread in a seperate thread
}while(true)
Run Code Online (Sandbox Code Playgroud)
所以我有几个问题:
我正在使用Java的IO库(慢慢地)掌握,所以任何指针都非常受欢迎.
谢谢!
这可能有一个微不足道的解决方案,但我在我的系绳的最后,所以我希望有人可以提供帮助.
我使用一个JTable,它有一个自定义渲染器和一组列的自定义编辑器.
渲染器使用JLabel组件,编辑器使用JSpinner组件.
我们的用户希望能够在列中输入值,然后按TAB或ENTER移动到表格中的下一个可编辑单元格.
如果我理解正确,这是JTable的默认行为.
但是,这对我来说似乎不正常.在用户单击单元格之前,仅显示JLabel.
只有当用户双击单元格时才会显示JSpinner(即CellEditor).因此,看起来单元格仅在MouseEvents上进入"编辑"模式,但在有焦点时则不然.
如果单元格有焦点,如何让单元格进入编辑模式?
对这个有点不明确的问题道歉 - 想不出更好的方法.
我使用JXTaskPane(来自Swing labs扩展API)来显示一些信息.
用户可以"单击"标题以展开面板.JXTaskPane位于容器JPanel中,然后将其添加到我的主应用程序窗口JFrame中.
我希望我的应用程序窗口调整为扩展任务窗格的大小.为此,我向容器JPanel添加了一个组件监听器,它将大小设置为现在扩展的面板.
panel.addComponentListener(new ComponentListener()
{
public void componentResized(ComponentEvent e)
{
Dimension newSize = ((JXTaskPane)e.getSource()).getSize();
reSizeFrame(newSize);
}
}
private void reSizeFrame(Dimension newSize)
{
if ((newSize.height < maxSize.height) && (newSize.width < maxSize.width))
{
containerPanel.setSize(newSize);
appFrame.setSize(containerPanel.getSize());
appFrame.pack();
}
}
Run Code Online (Sandbox Code Playgroud)
问题是在任务窗格扩展时调用componentResized方法,因此调用resizeFrame方法很多次,并且在屏幕上看起来非常糟糕.
如何检测JXTaskpane何时完成大小调整?我想到了两种方法:
将resizeFrame()方法放在SwingUtilities.invokeLate(..)调用中.
放入一个timer resizeFrame调用,所以任何后续调用都不会做任何事情,直到定时器触发.这应该为面板调整大小提供足够的时间.
前进的最佳方式是什么?
此外 - 这是我经过多年服务器端程序后的第一个认真的 Java GUI应用程序.StackOverflow非常有用.那谢谢啦!