我正在创建一个从javaSpace检索的客户端窗口,这是我正在使用的代码。
/**
* Create the frame.
*/
public Client()
{
space = SpaceUtils.getSpace();
if (space == null)
{
System.err.println("Failed to find the javaspace");
System.exit(1);
}
initFrame();
setVisible(true);
processPrintJobs();
}
窗口是在initFrame()中生成的;然后processPrintJobs检查是否有任何新消息。如果我注释掉processPrintJobs()方法调用,那么窗口会正确绘制,但如果方法调用在那里,则窗口只显示一个空白方块。
由于多次检查进程,因为窗口没有正确创建,因为在运行while循环之前创建窗口是没有意义的。
public void processPrintJobs()
{
while (true)
{
try
{
Message template = new Message();
if (channel == null)
{
System.out.println("No channel given");
} else
{
template.Channel = channel;
// System.out.println(channel);
template.position = new Integer(getNumber() + 1);
Message msg = (Message) space.read(template, null,
Long.MAX_VALUE);
messageList.append(msg.execute());
}
} catch (Exception e)
{
e.printStackTrace();
}
}
}
答案 0 :(得分:3)
答案 1 :(得分:2)
使用
java.awt.EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
processPrintJobs();
}
}
但总的来说,您的应用程序的体系结构缺少某些方面。
像线程或其他什么。
更多强> 的
例如,你可以使用一个摆动计时器,每一个工作单一个工作。
import javax.swing.Timer;
在Client构造函数的末尾调用。
Timer printJobsTimer = new Timer(100, new ActionListener() {
public void actionPerformed(ActionEvent e) {
// Process a print job:
if (channel != null) {
Message template = new Message();
template.Channel = channel;
template.position = new Integer(getNumber() + 1);
Message msg = (Message) space.read(template, null,
Long.MAX_VALUE);
messageList.append(msg.execute());
}
}
});
printJobsTimer.setInitialDelay(100);
printJobsTimer.start();
对于其他人来说,组合命名就没问题了:只是以大写字母开头的类名和带小写字母的其他名字。