小编Luh*_*har的帖子

使用getClass()加载资源.getResource()

我正在尝试加载图像以用作我的应用程序中的图标.根据本教程的适当方法是:

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 swing

21
推荐指数
3
解决办法
12万
查看次数

Java:BufferedReader的readLine方法的效率和可能的替代方案

我们正在努力减少延迟并提高用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)

所以我有几个问题:

  • inputReader.readLine()方法一旦命中\n字符就会返回,还是等到缓冲区满了?
  • 从使用BufferedReader获取套接字数据的速度是否更快?
  • 当输入字符串的大小小于Socket接收缓冲区的大小时会发生什么?
  • 当输入字符串的大小大于Socket接收缓冲区的大小时会发生什么?

我正在使用Java的IO库(慢慢地)掌握,所以任何指针都非常受欢迎.

谢谢!

java sockets io

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

JTable - 按Tab键使单元格进入编辑模式

这可能有一个微不足道的解决方案,但我在我的系绳的最后,所以我希望有人可以提供帮助.

我使用一个JTable,它有一个自定义渲染器和一组列的自定义编辑器.
渲染器使用JLabel组件,编辑器使用JSpinner组件.
我们的用户希望能够在列中输入值,然后按TAB或ENTER移动到表格中的下一个可编辑单元格.
如果我理解正确,这是JTable的默认行为.

但是,这对我来说似乎不正常.在用户单击单元格之前,仅显示JLabel.
只有当用户双击单元格时才会显示JSpinner(即CellEditor).因此,看起来单元格仅在MouseEvents上进入"编辑"模式,但在有焦点时则不然.

如果单元格有焦点,如何让单元格进入编辑模式?

java swing jtable

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

Java Swing:在组件*完成*大小调整时执行某些操作

对这个有点不明确的问题道歉 - 想不出更好的方法.

我使用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非常有用.那谢谢啦!

java swing jxtaskpane

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

标签 统计

java ×4

swing ×3

io ×1

jtable ×1

jxtaskpane ×1

sockets ×1