我需要将JScrollPane滚动到底部.JScrollPane包含一个JPanel,其中包含许多JLabel.
要滚动到顶部,我只是这样做:
scrollPane.getViewport().setViewPosition(new Point(0,0));
Run Code Online (Sandbox Code Playgroud)
但是如何精确滚动到最底部?(太远而且紧张不安)
我找不到任何官方文档说Component.repaint从除了事件调度线程(EDT)之外的另一个线程调用是安全的.
是这样吗?我在哪里可以找到一些文档/代码?
根据Swing教程:
一些Swing组件方法在API规范中标记为"线程安全"; 这些可以从任何线程安全地调用.必须从事件派发线程调用所有其他Swing组件方法.忽略此规则的程序可能在大多数情况下正常运行,但会遇到难以重现的不可预测的错误.
但是这些标记为"线程安全"的Swing组件方法是什么?实际上有吗?
是否有完整的线程安全摆动方法列表?(线程安全的Swing方法似乎很少见,所以这样的列表不能太长......)
我有一个多线程Java Swing应用程序.
几个线程将JTextArea通过写入via 来调用该方法textArea.append("something").我应该像这样包装它:
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
textArea.append("something");
}
});
Run Code Online (Sandbox Code Playgroud)
或者它只是一个内容更新,Swing会自己做正确的线程吗?
似乎当我实例化12个Swing Worker线程时,前六个开始完成它的任务,它完成AND然后最后六个开始并完成.我正在寻找的行为是所有12个线程同时开始工作并同时完成.
我有以下内容:
for (int i = 0; i < 12; i++ )
{
myTask m = new Mytask(i, START);
m.execute();
}
Run Code Online (Sandbox Code Playgroud)
myTask m将以0到100递增一个进度条,增量为25.我发现前六个线程开始递增的异常行为,它们以100结束,然后最后六个线程从0开始递增,然后结束.
是否存在可能具有的Swing Worker线程数量的限制因素?
主要思想是尝试创建一个具有标准Linux类型终端外观的应用程序.现在我只限于Java,这就是我想要的.
有没有足够简单的方法来做这样的事情.这应该是一个文本处理应用程序,应该独立于系统并独立运行.所有工作逻辑都应该来自用户输入.
有任何想法吗?
我最近开始在Swing中开发一个GUI,以便使用Smack API在java中编写一个简单的XMPP客户端.我遇到的问题是试图弄清楚如何将按钮点击转换为客户端上的操作而不必强制编写意大利面条代码以将所有内容绑定在一起.
是否有任何示例/教程,你知道哪些将显示更复杂的挥杆应用程序,而不是"我看一下按钮在屏幕上"?不幸的是,我的google-fu似乎只返回了这些简单的入门级课程的无数变化.我很乐意接受你知道我可以研究的开源应用程序.即使只是一个像"EventHandlers"这样的话题,也会令人惊叹.
我为我的问题的模糊性道歉,但我觉得在这一点上我只是在谷歌搜索符号.(IE除非你已经知道它所谓的键入google符号是无用的).如果我不清楚请提及哪里,我会尽我所能澄清.谢谢.
java doc说append方法是线程安全的.但是,我记得当我尝试从不同的线程(几个月前)使用附加到文本区域时,我得到混乱的文本,其中线程1将附加一些字符,而线程2将附加一些其他字符.因此,我没有在jtextarea中获取STRINGstring,而是获得了SstTrRINingG.
两者之间会有什么不同:
或者他们都可以解决问题吗?谢谢
我正在使用套接字编写Java客户端/服务器GUI应用程序,这是问题所在:
我有一个按钮开始侦听指定的端口:
按钮actionPerformed方法
private void listenButtonActionPerformed(java.awt.event.ActionEvent evt) {
int port = Integer.parseInt(portTextfield.getText(), 10);
try {
socket.listen(port);
} catch (IOException ex) {
}
}
Run Code Online (Sandbox Code Playgroud)
这是socket.listen方法
public static void listen() throws IOException {
ServerSocket ss = new ServerSocket(port);
while (true)
new socket(ss.accept());
}
Run Code Online (Sandbox Code Playgroud)
"socket"类扩展"Thread"
所以在ss.accept()返回一个值后,它会在单独的线程中创建新的socket实例.
单击按钮后,GUI冻结,因为在socket.listen方法中有一个无限循环.我怎么能避免这种情况?
不确定这是否是正确的问题,但我遇到了Java问题.我有一些Java代码在Java 6中工作但在Java 7中没有,错误是:
java.lang.IllegalStateException: This function should be called while holding treeLock
Run Code Online (Sandbox Code Playgroud)
使用Java6可以工作,但我们的一些外部用户正在运行Java 7.我发现错误是由调用引起的validateTree(),它在java6中工作但在Java7中我们需要调用validate().当我在本地测试时,它可以工作.
这里是我的问题,我开始在一家大公司工作,他们不会让我们对代码做任何修改,直到其被非常throughly看了看(我的工作变化,将采取在2013年4月影响),但在那之前我们的用户生气了.我不是最好的Java,并想知道是否有一种方法可以传递运行时参数来改变它?或者有什么我可以做而不触及代码库?
我很不好意思问这个问题,因为它可以通过实施修复来轻松解决,但任何想法或方向都会非常有用.
更新:我理想地寻找可以获得支持的东西,以放入java运行时参数,该参数将更改对validate()的所有validateTree()引用.