用进程ID替换Matlab标题名称不适用于startup.m

时间:2015-05-15 10:57:35

标签: matlab

我想启动matlab并将matlab窗口的标题替换为进程id。所以我创建了以下startup.m文件:

cd E:\matlab_files\
jDesktop = com.mathworks.mde.desk.MLDesktop.getInstance;
jDesktop.getMainFrame.setTitle(['PID:' num2str(feature('getpid'))]);

现在,matlab将文件夹更改为E:\ matlab_files,但不替换进程ID。一旦matlab启动并执行startup.m的第2行和第3行,那么matlab窗口的标题将被进程ID替换。

请解释此行为的原因。

我正在使用Matlab 2009b。

2 个答案:

答案 0 :(得分:3)

所有图片尚未完成初始化 - >所以你无法替换标题(我认为它还没有被创建)。

您可以尝试将jDesktop.getMainFrame.getTitle发送到startup.m,然后您会看到它是空的。

解释为什么 - 你还没有要求修复 - 但我想你想要一个! ;)

你可以通过使用计时器来解决这个问题 - 注意我在下面的计时器中放了60秒 - 但它可能要少得多。

function startup
  if ~isdeployed  % its agood practice to use this incase you ever compile your codes.
    cd E:\matlab_files\
    timerFcn = @updatetitle;
    tfcn = timer('StartDelay', 60, 'TimerFcn', timerFcn );
    start(tfcn)
  end
end
function updatetitle(varargin)
  jDesktop = com.mathworks.mde.desk.MLDesktop.getInstance;
  jDesktop.getMainFrame.setTitle(['PID:' num2str(feature('getpid'))]);
end

答案 1 :(得分:0)

我观察到同样的行为。请注意,在MATLAB仍在启动时,startup.m是从matlabrc.m运行的。您可以通过将代码放在matlabrc.m中进行实验,但我不建议您编辑该文件。

有几个可能的原因:

  1. 在startup.m运行后,MATLAB可能会覆盖matlab窗口的标题。
  2. Java在启动时可能无法完全可用,您的代码显然依赖于Java。