我的总体目标是通过ansible为特定用户重新启动pulseaudio(所以如果您有更好的想法如何做到这一点,我很乐意听到它:))
我想以用户身份运行以下命令myuser,根据pulseaudio,这不应该以 sudo/root 身份完成。
$([[ $(pulseaudio -k) -eq 0 ]] || exit 0; sleep 5; [[ $(pulseaudio -D --exit-idle-time=-1) -eq 0 ]] || exit 0)
Run Code Online (Sandbox Code Playgroud)
如果我自己在一台机器上测试它,效果会很好。如果pulseaudio正在运行,它会杀死它,然后再次启动它,如果pulseaudio已经停止,它不会失败。
我的 ansible 任务(作为角色的一部分)如下所示:
- name: restart pulse audio
shell: '$([[ $(pulseaudio -k) -eq 0 ]] || exit 0; sleep 5; [[ $(pulseaudio -D --exit-idle-time=-1) -eq 0 ]] || exit 0)'
args:
executable: /bin/bash
become: true
become_method: sudo
become_flags: "su - {{ ansible_user }} -c"
Run Code Online (Sandbox Code Playgroud)
但如果我运行它,我会收到错误FAILED! => {"msg": "Timeout …
我正在编写一个扩展JComboBox的自定义组件.我的问题是,如果我添加或删除项目,PopupMenu将不会实现其大小.所以列表中有2个项目,但如果在PopupMenu中有2个"空"项之前有4个项目.
我找到的唯一解决方法是做(在JIntelligentComboBox.java第213行)
this.setPopupVisible(false);
this.setPopupVisible(true);
但结果将是一个闪烁的PopupMenu :-(
那么我还能做些什么来刷新/重绘PopupMenu而不会闪烁?
提前致谢
编辑:我的目标是一个ComboBox,其行为类似于Firefox或Chrome中的地址栏,我想显示包含类型字符的PopupMenu的所有项目.
cboxtester.java:
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Component;
import javax.swing.DefaultComboBoxModel;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JList;
import javax.swing.plaf.basic.BasicComboBoxRenderer;
public class cboxtester extends JFrame {
private DefaultComboBoxModel dcm = new DefaultComboBoxModel(new Object[][] {new Object[] {"Mittagessen", "", 0},
new Object[] {"Essen", "", 0},
new Object[] {"Frühstück", "", 0},
new Object[] {"Abendessen", "", 0}});
private JIntelligentComboBox icb = new JIntelligentComboBox(dcm);
private cboxtester(){
this.add(icb, BorderLayout.CENTER);
this.add(new JButton("bla"), BorderLayout.EAST); …Run Code Online (Sandbox Code Playgroud)