Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
491 views
in Technique[技术] by (71.8m points)

user interface - Determine if Matlab has a display available

I would like to use questdlg within a Matlab application to prompt user feedback. If no display is available (e.g. over a non-forwarded ssh session or if Matlab is started with -nodisplay), questdlg fails (see below). Is there any way to determine if a display is available from within Matlab code so that I can fall back to a text-based alternative?

If Matlab is started with the -nodisplay option, qusetdlg produces the following output and "hangs" Matlab (in uiwait). Although the user can use Ctl-C to escape, there's no indication of this option and a naive user might conclude that Matlab was truly hung:

>> questdlg('test','test')
Warning: This functionality is no longer supported under the -nodisplay and
-noFigureWindows startup options. For more information, see "Changes to
-nodisplay and -noFigureWindows Startup Options" in the MATLAB Release Notes.
To view the release note in your system browser, run
web('http://www.mathworks.com/access/helpdesk/help/techdoc/rn/br5ktrh-1.html#br5ktrh-3',
'-browser') 
> In uitools/private/warnfiguredialog at 19
  In dialog at 37
  In questdlg at 117
Warning: This functionality is no longer supported under the -nodisplay and
-noFigureWindows startup options. For more information, see "Changes to
-nodisplay and -noFigureWindows Startup Options" in the MATLAB Release Notes.
To view the release note in your system browser, run
web('http://www.mathworks.com/access/helpdesk/help/techdoc/rn/br5ktrh-1.html#br5ktrh-3',
'-browser') 
> In uitools/private/warnfiguredialog at 19
  In uiwait at 41
  In questdlg at 378
See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

First of all, here is a list of relevant startup options, along with the operating system on which they are supported (otherwise they are ignored and have no effect):

  • -nojvm [UNIX] : start without JVM, anything that requires Java fails (including Handle Graphics functionality)
  • -nodisplay [UNIX]: does not use X-Window display, ignores $DISPLAY environment variable
  • -noFigureWindows [ALL] : headless mode, no figure will be shown
  • -nodesktop [ALL] : IDE not started, command prompt instead

Since I only have access to a Windows install of MATLAB, I would be thankful If someone can replicate the following experiments on UNIX, by starting MATLAB with the -nodisplay option, or runing without the DISPLAY environment variable set, in combination with the -nodisplay and -nojvm options.

matlab -nodesktop

? [usejava('jvm'),usejava('awt'),usejava('mwt'),usejava('Desktop')]
ans =
     1     1     1     0
? get(0,'ScreenSize')
ans =
           1           1        1600        1024
? feature('ShowFigureWindows')
ans =
     1
? questdlg('?','?');
[works fine]
? plot(1:10)
[works fine]

matlab -noFigureWindows

? [usejava('jvm'),usejava('awt'),usejava('mwt'),usejava('Desktop')]
ans =
     1     1     1     1
? get(0,'ScreenSize')
ans =
           1           1        1600        1024
? feature('ShowFigureWindows')
ans =
     0
? questdlg('?','?');
Warning: This functionality is no longer supported ....
? plot(1:10)
[no plot]

matlab -nodesktop -noFigureWindows

? [usejava('jvm'),usejava('awt'),usejava('mwt'),usejava('Desktop')]
ans =
     1     1     1     0
? get(0,'ScreenSize')
ans =
           1           1        1600        1024
? feature('ShowFigureWindows')
ans =
     0
? questdlg('?','?');
Warning: This functionality is no longer supported ....
? plot(1:10)
[no plot]

In conclusion, this is the test I would use to get consistent results across platforms:

if usejava('jvm') && ~feature('ShowFigureWindows')
    %# use text-based alternative (input)
else
    %# use GUI dialogs (questdlg)
end

Some references:


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...